Linux下c语言的图形编程

Linux下c语言的图形编程UNIX下c语言的图形编程--curses.h 函式库作者:不详来源:收集整理发布时间:2005-7-22 19:39:36相信您在网路上一定用过如tin,elm 等工具, 这些软体有项共同的特色,即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式的画面也较为美观. 对Programming 有兴趣的朋友一定对此感到好奇, 也许他能在PC 上用Turbo C 轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误.其实, 原因很简单, 他使用的函式库可能在UNIX 上是没有定义的.有些在Turbo-C 上被广泛使用的一些函式, 可能在UNIX 上是不被定义的.为了因应网路上各式各样的终端机形态(terminal), UNIX 上特别发展出一套函式库, 专门用来处理UNIX 上游标移动及萤幕的显示. 这就是本篇文章要为您介绍的- curses.h 函式库. 利用这个函式库, 您也可以写出像elm 般利用方向键来移动光棒位置的程式. (CCCA 近来所提供的线上选课程式, 及程式服务界面, 即是笔者利用curses 发展而成的)■ curses 的历史与版本cureses 最早是由柏克莱大学的Bill Joy 及Ken Arnold 所发展出来的.当时发展此一函式库主要原因是为了提高程式对不同终端机的相容性而设计的.因此,利用curses发展出来的程式将和您所使用的终端机无关.也就是说, 您不必担心您的程式因为换了一部终端机而无法使用.这对程式设计师而言,尤其是网路上程式的撰写,是件相当重要的一件事. curses之所以能对上百种以上的终端机工作,是因为它将所有终端机的资料,存放在一个叫termcap 的资料库,( 而在第二版的System V 系统中,新版的curses 以terminfo 取代原来的termcap). 有了这些记录, 程式就能够知道遇到哪一种终端机时,须送什麽字元才能移动游标的位置,送什麽字元才能清除整个萤幕清除. (* 注一)另外, 本文的介绍以System V 的curses 版本为主.■ 如何在您的程式使用curses ?在您的C 程式的档头将<curses.h> include 进来.当您引进curses.h这个函式库後,系统会自动将<stdio.h> 和<unctl.h>一并include 进来.另外,在System V版本中, <terminfo.h>这个函式库也将一并include进来.#include <curses.h>main(){: :: :}当然, 您的系统内必须放有curses.h 这个函式库.■ 如何编译(compile)当您编辑好您的程式, 在UNIX 提示符号下键入:% /usr/5bin/cc [file.c] -lcurses^^^^^^^引进curses.h 这个library或% /usr/5bin/cc [file.c] -lcurses -ltermlib(*注二)■ 如何开始我的第一个curses 程式?在开始使用curses 的一切命令之前, 您必须先利用 initscr()这个函式来开启curses 模式. 相对的, 在结束curses模式前(通常在您结束程式前)也必须以endwin()来关闭curses 模式.#include <curses.h>main(){initscr();: :: :: :endwin();}这是一般curses 程式标准的模式.此外, 您可以就您程式所须, 而做不同的设定. 当然, 您可以不做设定,而只是呼叫initscr().您可以自己写一个函式来存放所有您所须要的设定. 平常使用时, 只要呼叫这个函式即可启动curses 并完成一切设定.下面的例子, 即是笔者将平常较常用的一些设定放在一个叫initial()的函式内.void initial(){initscr();cbreak();nonl();noecho();intrflush(stdscr,FALSE);keypad(stdscr,TRUE);refresh();}各函式分别介绍如下:□ initscr()initscr() 是一般curses 程式必须先呼叫的函数, 一但这个函数被呼叫之後, 系统将根据终端机的形态并启动curses 模式.□ endwin()curses 通常以呼叫endwin() 来结束程式. endwin() 可用来关闭curses 模式, 或是暂时的跳离 curses 模式.如果您在程式中须要call shell ( 如呼叫system() 函式) 或是需要做system call,就必须先以endwin()暂时跳离curses模式.最後再以wrefresh() doupdate() 来重返curses 模式.□ cbreak()nocbreak()当cbreak 模式被开启後, 除了DELETE 或CTRL 等仍被视为特殊控制字元外一切输入的字元将立刻被一一读取.当处於nocbreak 模式时, 从键盘输入的字元将被储存在buffer 里直到输入RETURN或NEWLINE.在较旧版的curses 须呼叫crmode(),nocrmode() 来取代cbreak(),nocbreak()□ nl()nonl()用来决定当输入资料时, 按下RETURN 键是否被对应为NEWLINE 字元( 如\n ).而输出资料时, NEWLINE 字元是否被对应为 RETURN 和LINDFEED系统预设是开启的.□ echo()noecho()此函式用来控制从键盘输入字元时是否将字元显示在终端机上.系统预设是开启的.□ intrflush(win,bf)呼叫intrflush 时须传入两个值: win 为一WINDOW 型态指标, 通常传入标准输出入萤幕stdscrbf 为TRUE 或FALSE当bf 为true 时, 当输入中断字元( 如break) 时, 中断的反应将较为快速.但可能会造成萤幕的错乱.□ keypad(win,bf)呼叫keypad 时须传入两个值:win 为一WINDOW 型态指标, 通常传入标准输出入萤幕stdscrbf 为TRUE 或FALSE当开启 keypad 後, 可以使用键盘上的一些特殊字元, 如上下左右等方向键, curses 会将这些特殊字元转换成curses.h 内定义的一些特殊键. 这些定义的特殊键通常以KEY_ 开头.□ refresh()refresh() 为curses 最常呼叫的一个函式. curses 为了使萤幕输出入达最佳化, 当您呼叫萤幕输出函式企图改变萤幕上的画面时, curses 并不会立刻对萤幕做改变, 而是等到refresh() 呼叫後, 才将刚才所做的变动一次完成. 其馀的资料将维持不变. 以尽可能送最少的字元至萤幕上. 减少萤幕重绘的时间.如果是initscr() 後第一次呼叫 refresh(), curses 将做清除萤幕的工作.■ 游标的控制move(y,x) 将游标移动至x,y 的位置getyx(win,y,x) 得到目前游标的位置(请注意! 是y,x 而不是&y,&x )■ 有关清除萤幕的函式clear()erase() 将整个萤幕清除(请注意配合refresh() 使用)■ 如何在萤幕上显示字元echochar(ch) 显示某个字元addch(ch) 显示某个字元mvaddch(y,x,ch) 在(x,y) 上显示某个字元相当於呼叫move(y,x);addch(ch);addstr(str) 显示一串字串mvaddstr(y,x,str) 在(x,y) 上显示一串字串相当於呼叫move(y,x);addstr(str);printw(format,str) 类似printf() , 以一定的格式输出至萤幕mvprintw(y,x,format,str) 在(x,y) 位置上做printw 的工作.相当於呼叫move(y,x);printw(format,str);■ 如何从键盘上读取字元getch() 从键盘读取一个字元(注意! 传回的是整数值)getstr() 从键盘读取一串字元scanw(format,&arg1,&arg2...) 如同scanf, 从键盘读取一串字元□例:int ch;char string1[80]; /* 请注意! 不可宣告为char *string1; */char string2[80];echo(); /* 开启echo 模式, 使输入立刻显示在萤幕上*/ch=getch();string1=getstr();scanw("%s",string2);mvprintw(10,10,"String1=%s",string1);mvprintw(11,10,"String2=%s",string2);■ 如何利用方向键curses 将一些如方向键等特殊控制字元, 以KEY_ 为开头定义在curses.h这个档案里头, 如KEY_UP 即代表方向键的" ↑ ".但, 如果您想使用curses.h所为您定义的这些特殊键的话,您就必须将keypad设定为TRUE. 否则, 您就必须自己为所有的特殊键定义了.curses.h 为一些特殊键的定义如下:KEY_UP 0403 ↑KEY_DOWN 0402 ↓KEY_LEFT 0404 ←KEY_RIGHT 0405 →KEY_HOME 0406 Home key (upward+left arrow)KEY_BACKSPACE 0407 backspace (unreliable)KEY_F0 0410 Function keys.KEY_F(n) (KEY_F0+(n)) formula for f .KEY_NPAGE 0522 Next pageKEY_PPAGE 0523 Previous page以上仅列出笔者较常使用的一些控制键, 至於其他控制键的定义, 请自行参阅man curses (* 注三)一并为您列出其他常用的一些特殊字元[TAB] /t[ENTER] /r[ESC] 27[BACKSPACE] 127■ 如何改变萤幕显示字元的属性为了使输出的萤幕画面更为生动美丽, 我们常须要在萤幕上做一些如反白,闪烁等变化. curses 定义了一些特殊的属性, 透过这些定义, 我们也可以在curses 程式□控制萤幕的输出变化.attron(mod) 开启属性attroff(mod) 关闭属性curses.h 里头定义了一些属性, 如:A_UNDERLINE 加底线A_REVERSE 反白A_BLINK 闪烁A_BOLD 高亮度A_NORMAL 标准模式(只能配合attrset() 使用)当使用attron() 开启某一种特殊属性模式後, 接下来在萤幕的输出都会以该种属性出现. 直到您呼叫attroff() 将此模式关闭.请注意, 当您欲attron() 开启另一种属性时, 请记得利用attroff()先关闭原来的属性, 或直接以attrset(A_NORMAL) 将所有特殊属性关闭.否则, curses 会将两种属性做重叠处理.□例:attrset(A_NORMAL); /* 先将属性设定为正常模式*/attron(A_UNDERLINE); /* 加底线 */mvaddstr(9,10,"加底线"); /* 加底线输出一串字元 */attroff(A_UNDERLINE); /* 关闭加底线模式, 恢复正常模式*/attron(A_REVERSE); /* 开启反白模式 */mvaddstr(10,10,"反白"); /* 输出一串反白字元*/attroff(A_REVERSE); /* 关闭反白模式, 恢复正常模式 */attron(A_BLINK); /* 开启闪烁模式 */mvaddstr(11,10,"闪烁"); /* 输出一串闪烁字元*/attroff(A_BLINK); /* 关闭闪烁模式, 恢复正常模式 */attron(A_BOLD); /* 开启高亮度模式 */mvaddstr(12,10,"高亮度"); /* 输出一串高亮度字元 */attroff(A_BOLD); /* 关闭高亮度模式, 恢复正常模式*/■ 其他常用的一些函式beep() 发出一声哔声box(win,ch1,ch2) 自动画方框 ch1: 画方框时垂直方向所用字元ch2: 画方框时水平方向所用字元example: box(stdscr,'|','-');将以| 及- 围成一个方框■ 应用完整□例下面所举的例子,即完全利用刚刚所介绍的含式来完成.这个程式可将从键盘上读取的字元显示在萤幕上, 并且可以上下左右方向键来控制游标的位置, 当按下[ESC] 後, 程式即结束.您有没有发现, 这不就是一个简单全萤幕编辑器的雏形吗?#include <curses.h> /* 引进curses.h , 并自动引进stdio.h */#define StartX 1 /* 决定游标初始位置*/#define StartY 1void initial();main(){int x=StartX; /* 宣告x,y 并设定其初值*/int y=StartY;int ch; /* 宣告ch 为整数,配合getch()使用 */initial(); /* 呼叫initial(), 启动curses 模式, *//* 并完成其它设定*/box(stdscr,'|','-'); /* 画方框*/attron(A_REVERSE); /* 开启反白模式*/mvaddstr(0,20,"Curses Program"); /* 在(20,0) 处输出反白字元*/attroff(A_REVERSE); /* 关闭反白模式*/move(x,y); /* 将游标移至初始位置*/do { /* 以无限回圈不断等待输入*/ch=getch(); /* 等待自键盘输入字元*/switch(ch) { /* 判断输入字元为何*/case KEY_UP: --y; /* 判断是否"↑"键被按下*/break;case KEY_DOWN: ++y; /* 判断是否"↓"键被按下*/break;case KEY_RIGHT: ++x; /* 判断是否"→"键被按下*/break;case KEY_LEFT: --x; /* 判断是否"←"键被按下*/break;case '\r': /* 判断是否ENTER 键被按下*/++y;x=0;break;case '\t': /* 判断是否TAB 键被按下*/x+=7;break;case 127: /* 判断是否BACKSPACE 键被按下*/mvaddch(y,--x,' ');/* delete 一个字元*/break;case 27: endwin(); /* 判断是否[ESC]键被按下 */exit(1); /* 结束curses 模式*//* 结束此程式 */default:addch(ch); /* 如果不是特殊字元, 将此字元印出*/x++;break;}move(y,x); /* 移动游标至现在位置*/} while (1);}void initial() /* 自定开启curses 函式*/{initscr();cbreak();nonl();noecho();intrflush(stdscr,FALSE);keypad(stdscr,TRUE);refresh();}■ 後记学完了上述的一些命令, 相不相信您已经可以写出一个漂亮的全萤幕编辑器了? 事实上, curses 提供的函式不下200 个, 可是笔者认为, 一切再复杂的函式都可以用本文提到的一些组合变化而成,学了太多的函式, 只是徒增自己困扰罢了.当然,如果您对其它函式有兴趣,可以自行参阅curses 说明档. ( 方法: % man curses ) 本文不过行抛砖引玉之效, 也希望未来能陆续出现更多同学自行创作的程式.* 任何疑问及建议, 欢迎e-mail 至[email]ljh@.tw[/email]. 谢谢! *注一:请参考/usr/share/lib/termcup/usr/share/lib/terminfo/s/sun注二:1.如果是BSD 的版本, 需使用cc [file.c] -lcurses -ltermcap 来完成compile.2.计中工作站不知何故将原来的/usr/5bin/cc 更改为/usr/5bin/因此, 您若想在计中工作站compile curses 程式.需以/usr/5bin/cc. org取代/usr/5bin/cc ,否则compile 可能发生错误.3.较旧版的curses 需同时引进curses 和termlib 这两个library,因此, 您必须使用/usr/5bin/cc [file.c] -lcurses -ltermlib 来compile.注三:根据笔者的经验, 上下左右方向键应可正常使用而不会发生问题, 但其它如PgUp,PgDn,功能键,Home,End 等特殊键, 很容易因机器, 键盘不同而无法使用, 因此, 若您的程式须要在不同的机器上使用, 建议您只用方向键来控制, 其它的特殊键少用为妙.至於PgUp,PgDn 一些特殊键的控制方法, 由於较为复杂, 有兴趣的同学可参考tin 原始程式curses.c 内所使用的一些方法.。

合集下载

Linux下图形用户界面程序的开发与实现

Linux下图形用户界面程序的开发与实现
本文首先简单介绍了 L inux下常用的开发工具 ,然后详细 分析 Q t的特点 ,说明 Q t及其提供的一种真正可视化的编程工 具 Q t Designer的开发步骤 ,最后根据我们的开发实践总结了 Q t 的优点 。
(3) Kylix 它是 Borland于 2001年初推出的 L inux版本的 Delphi,它和 W indow s下的 Delphi一样都是使用 Object Pascal语 言 。它 采用以 Xwindow Q t开发组件为基础的新的组件架 构 CLX,与多数 L inux系统兼容 ,是基于 L inux系统的第一套集界 面设计 、代码编写 、调试运行于一体的 RAD。相信熟悉 Delphi 的程序员对它一定会很快上手 。
(4) Q t 它是 Troll Tech公司的标志性产品 ,而 Q t Designer 是 Q t提供的一种真正可视化的编程工具 ,采用 C + +作为程序 设计语言 。Q t工具包有两种不同的版本 ,一种是用于商业性质 的专业版 ,另一种是用于开发 X平台自由软件的自由版 。专业 版用于创造成功的商业贸易方面的跨平台软件 ;而自由版已经 成为用 C + + GU I工具包在 L inux上进行自由软件开发的主流 , 它是 L inux上流行的 KDE桌面环境的基础 。另外 ,它还是一种 跨平台的编程工具 ,能够确保软件非常方便地应用于绝大多数 操作系统 。
3 用 Qt开发程序的方法
311 使用 Qt工具包开发程序的基本框架
Q t的可视化开发工具 Q t Designer是在 Q t 2. 2 版本以后才 提供的 ,所以早期的图形用户界面开发主要使用系统提供的界 面元素类 。使用这种开发方法设计出来的程序一般需要编写三 种类型的文件 :头文件 (. h) 、实现文件 (. cpp )和 main (. cpp )主 函数文件 :在头文件中主要是定义各种类 。在实现文件中实现 类的构造函数及成员函数 。而在主函数文件中进行程序的启动 和主窗口的设置等 。

Linux下的图形界面编程的实现

Linux下的图形界面编程的实现

Linux下的图形界面编程的实现黄 哲,陈 多Ξ(湖南工程学院计算机科学系,湖南湘潭411104) 摘 要:Linux下的图形界面编程一直是深受软件人员关注的一个问题,因其不具有Windows环境下图形界面开发的各种IDE工具.目前,Linux环境下,大部分图形界面程序都是用Gtk+实现的,文章介绍了Gtk+开发的基本思想,以及基于GKT工具包的图形开发工具G lade,详细叙述了基于Gtk+和G lade的布局方式、信号捕捉的实现,并列举了一个网络聊天室程序实例.关键词:Gtk;G lade;多线程中图分类号:TP31 文献标识码:A 文章编号:1671-119X(2006)01-0058-031 Gtk+2.0介绍1.1 Gtk+2.0的基本原理GT K+是L INU X平台下的X Window图形窗口编程工具,GT K+最初是由California大学Berke2 ley分校的两名学生Spencer K imball和Peter Mattis 开发而成的[1].GT K+从不完善渐渐地发展,到目前为止,成千上万的程序都己经使用GT K+来编写,这预示着GT K+在未来某个时候将得到广泛的应用.GT K+是一个图形用户编程工具,可以免费注册,所以用来开发自由软件或商业软件都不需要什么花费.现在很多L INU X集成系统都己经将GT K+打包进去了.包括RedHat Linux6.0以上版本,还有中文版的Turbo Linux等等.它也越来越被普遍地应用于UN IX系统编程.它为开发GIMP (GNU Image Manipulation Program,GNU图形操作程序)而研制的一套图形界面库,在功能上类似于微软的MFC库,就是为应用软件提供一套平台无关的,简单易用的图形界面接口.它几乎包括所有基本的图形界面元素,如窗口,按钮,列表,滚动条等等.GT K+软件层次:GT K+G D Kglib XL INUX下的C语言软件层次的最底层是L INU X下的C语言基础[2],其它的层次都是基于C语言,可以说GT K+就是C语言在L INU X下的一种扩展,它易学易用,不用关心硬件层的实现,对于编写新手是一门不错的“C语言”.G lib是GT K+,G D K使用的C函数,宏和结构的库,包含内存分配,字符串格式,时间与日期,I/O,定时函数,也包括链接表,数组,HASH 表,队列和缓存的工具函数.X是用来控制显示的底层图形函数库,包括所有窗口函数,有显示窗口和回应鼠标的函数.G D K是为了方便程序员使用而简化X函数的函数库.2002年三月一十一日,GT K+2.0版正式发布,开发者们自豪地宣称“GT K+2.0标志着自由软件领域的图形界面开发工具走向成熟”. 1.2 Gtk+2.0的布局对GT K显示格式的控制是通常通过打包盒子来完成的.widget组件打包可以采用两种方式,水平盒子和垂直盒子.若将widget组件打包进平行盒子,组件就被依次水平的插入窗口;若是垂直盒子,则组件排列是垂直的.产生新的水平盒子的函数为GtkWidget3gtk hbox new(gint homoge2 neous,gint spacing);参数homogeneous是用来控制是否盒子中的每个组件都有同样的大小(例如水平盒子中的控件有同样的宽度,垂直盒子中的控件有同样的高度). Spacing参数是组件之间的间隔.垂直盒子的创建函数是gtk vbox new(),定第16卷第1期2006年3月 湖南工程学院学报Journal of Hunan Institute of EngineeringVo1.16.No.1Mar.2006Ξ收稿日期:2005-09-06作者简介:黄 哲(1979-),男,助教,研究方向:计算机应用.义与水平盒子一致.gtk box pack start()和gtk box pack end()函数是用来将打包对象放入这些盒子中的.void gtk box pack start(GtkBox3box,GtkWidget3child,gint expand,gint fill,gint padding);第一个参数是你将组件打进去的盒子指针,第二个参数是你将要打进去的组件指针.Expand参数是用来控制是否允许组件扩展至分配给盒子空间的大小(选TRU E),还是盒子的大小收缩到组件那么大(选FAL SE).函数中的fill参数是用来控制是否将多余的空间分配给组件,即将组件扩展到盒子的大小(选TRU E),或者多余的空间不变,保留作为盒子和打包组件间的间隔.该参数只有在expand参数取TRU E时才有效.Padding参数是指组件四周与盒子的间隔大小.注意fill取FAL SE值,expand取TRU E值时与expand取FAL SE值,fill值无效的区别.前者的盒子仍是原来创建盒子时指定的大小,而后者的盒子已经缩小到打包组件的大小了.1.2 Gtk+2.0信号捕捉GT K是一个事件驱动工具包,当它运行到gtk-main()函数时会自动睡眠,直到有事件发生,控制权转让给相应的函数调用,在该函数中可以用标准C 写出相应的事物逻辑[3].这与windows上的程序处理是一样的.对窗口对象上发生的事件(如按下鼠标,激活键盘等),GT K有相应的消息信号产生.这时就需要程序员创建一个信号处理器来捕获该信号,并告诉GT K程序事件发生后调用哪个回调函数.信号处理器的创建函数定义如下:gint gtk signal connect(GtkObject3object, gchar3name,GtkSignalFunc callback func, gpointer func data);返回值是一个区分同一对象中的事件与不同回调函数的关联标签.这样可以做到一个对象的一个信号就有任意多个回调函数,并且每一个都会按照声明的顺序执行.函数调用的第一个参数是产生信号的widget组件(即按钮等窗口构件),而name则是希望捕获的信号或事件的名称,callback func则是事件发生后所调用的回调函数名称,而第四个参数func data则是传递给回调函数的参数.回调函数要定义在主程序的前面,它们的一般格式都如下所示:void callback func(GtkWidget3widget, gpointer func data);调用下面这个方法将允许你将回调函数与事件的关联断开:void gtk signal disconnect(GtkObject3ob2 ject,gint id);该函数的第二个参数就是上述gtk signal connect()函数的返回值,即关联标签.第一个参数指向了去除关联的对象名称.这样可以做到断开事件与回调函数的关联,使得事件发生后,不会调用相关的回调函数.2 Gtk的辅助工具G ladeG lade是一种图形界面开发工具,有点类似VB 的感觉,但它只能用于图形界面开发,本身不是一门丰富的程序设计语言,它是依靠GT K+来实现的程序的图形界面,也是说它只是为了简化GT K+的开发而存在的[4].2.1 新建工程当用户在glade窗口新建文件时,glade会弹出一个对话框,上面有两个选项,一个是新建GT K+工程,一个是新建GNOM E2工程,选择新建GT K+工程后,将显示图形界面开发环境.2.2 联编工程当按下主窗口的联编时,G lade产生用来生成程序GU I的所有文件.首先是project#目录,在这个目录中有ac2 config.h、autogen.sh、configure.in、Makefile.am、stamp-h.in、autoconf、autogen、automake文件,其中后3个文件是系统所必须的,在Linux下这个系统能够自动编译并检查库依赖性.通常G lade用户只需输入./autogen.sh来配置他们的程序以及生成所需的Makefiles文件.如果工程需要一个特定的库,这个库将会加入配置文件或生成的Makefiles文件中.在macros subdirectory这个目录中保存了auto2 conf和autogen等系统所需的宏.在src这个目录中有main.c support.c callbacks.c interface.c Make2 file.am Makefile.in Makefile文件,在main.c这个文件中包含了main(),main()是所有C程序的初始化函数.只有当这个文件不存在时G lade才创建,因此你可以随意编辑.当G lade第一次生成main.c文件时,它允许显示所有创建的窗口.如果想在程序开始时只显示一个窗口需要编辑这个文件.在sup295第1期 黄 哲等:Linux下的图形界面编程的实现port.c中包含glade支持函数,不能编辑.里面最有用的函数是lookup-widget(),允许通过另一个控件的名字查找特定控件callbacks.c中主要是glade所写的所有回调函数和信号处理器.G lade不重写这个文件,不过当需要更多的回调函数会向其中追加.G lade只写出了空的回调函数,需要你自己加入内容.interface.c也不能编辑.G lade在里面写了生成GU I的函数.再就是Makefile.am、Makefile.in和Makefile文件,这些文件由automake/autoconf包创建,为gcc编译程序提供指导.在这里可以加入包含的库、新的资源文件等等.2.3 保存工程当你在glade主窗口按下保存时,glade将会在工程选项中指定的目录下保存两个文件.如果没有指定任何工程名字,glade将会保存在个人目录下面的/Projects子目录下.工程名为’Project#’,#是一个数字,与你所建工程数量相关.给工程/程序命名时最好避免歧义.如果命名了工程,用你程序的名字替换下面的project#.保存时创建的两个文件是: Project1.glade和Project1.gladep.Project1’是你选项中给出的名字.这两个文件含有xml代码,glade 或libglade用来调出你所创的程序.如果联编了工程,3.glade文件将会被libglade调用.如果你想在程序中调用libglade那就直接使用3.glade文件.3 Gtk+2.0和G lade的聊天室实例聊天室程序是在Linux环境下用Gtk+2.0和G lade工具实现的[5].它基本用到了Linux下Gtk+图形编程的所有实用技术,包括动态按钮、图形、字体颜色、滚动条等.并结合了网络编程和多线程编程的相关技术.4 结束语目前X窗口(Xwindow)和GNU编译系统已成为应用linux或unix操作系统的计算机工作站和大型计算机上最主要的图形用户界面系统,在微机上也有广泛应用.而Gtk正是两者结合的编程开发包.Gtk+2.0以它熟悉的底层编程语言和方便实用的开发工具,在Linux下的图形界面编程领域有着较好的应用前景.参 考 文 献[1] Arthur Griffith.GNOME/GT K+编程宝典[M].电子工业出版社,2002.109-186.[2] Logan,战晓苏.GT K+程序设计C语言版[M].清华大学出版社,2002.256-374.[3] J.Bhasker.Linux平台下的C语言编程指南[M].机械工业出版社,2000.[4] Kurt Wall.GNU/Linux programming[M].清华大学出版社,2002.[5] 宋国伟.GT K+2.0编程范例[M].清华大学出版社,2002.106-308.R ealization of Linux G raph Interface ProgramingHUAN G Zhe,CHEN Duo(Dept.of Computer Science,Hunan Institute of Engineering,Xiangtan411104,China)Abstract:The Linux graphical interface programming always attracts the accention of the software personnel because it does not have the variow kinds of IDE tool used for the qraphical interface development under the win2 dows environ ment.At present many Linux graph interface programs are realized by Gtk+.The article intro2 duces the basic theory of Gtk+,and the graph development kit G lade based on GKT tool bag.The Layout way based Gtk and the G lade and the signal cpature realization are described in detail.At last,this article gives an example to illustrate the network chatroom.K ey w ords:Gtk;G lade;multithreading06 湖南工程学院学报 2006年。

linux下c语言画线函数及头文件 (1)

linux下c语言画线函数及头文件 (1)

UNIX下c语言的图形编程--curses.h相信您在网路上一定用过如tin,elm 等工具, 这些软体有项共同的特色, 即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式的画面也较为美观. 对Programming 有兴趣的朋友一定对此感到好奇, 也许他能在PC 上用Turbo C 轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误.其实, 原因很简单, 他使用的函式库可能在UNIX 上是没有定义的. 有些在Turbo-C 上被广泛使用的一些函式, 可能在UNIX 上是不被定义的.为了因应网路上各式各样的终端机形态(terminal), UNIX 上特别发展出一套函式库, 专门用来处理UNIX 上游标移动及萤幕的显示. 这就是本篇文章要为您介绍的- curses.h 函式库. 利用这个函式库, 您也可以写出像elm 般利用方向键来移动光棒位置的程式. (CCCA 近来所提供的线上选课程式, 及程式服务界面, 即是笔者利用curses 发展而成的)■curses 的历史与版本cureses 最早是由柏克莱大学的Bill Joy 及Ken Arnold 所发展出来的.当时发展此一函式库主要原因是为了提高程式对不同终端机的相容性而设计的. 因此, 利用curses 发展出来的程式将和您所使用的终端机无关.也就是说, 您不必担心您的程式因为换了一部终端机而无法使用. 这对程式设计师而言, 尤其是网路上程式的撰写, 是件相当重要的一件事.curses之所以能对上百种以上的终端机工作, 是因为它将所有终端机的资料, 存放在一个叫termcap 的资料库, ( 而在第二版的System V 系统中, 新版的curses 以terminfo 取代原来的termcap). 有了这些记录, 程式就能够知道遇到哪一种终端机时, 须送什麽字元才能移动游标的位置, 送什麽字元才能清除整个萤幕清除. (* 注一)另外, 本文的介绍以System V 的curses 版本为主.■如何在您的程式使用curses ?在您的C 程式的档头将<curses.h> include 进来.当您引进curses.h这个函式库後, 系统会自动将<stdio.h> 和<unctl.h>一并include 进来.另外, 在System V 版本中, <terminfo.h> 这个函式库也将一并include进来.#include <curses.h>main(){: :: :}当然, 您的系统内必须放有curses.h 这个函式库.■如何编译(compile)当您编辑好您的程式, 在UNIX 提示符号下键入:% /usr/5bin/cc [file.c] -lcurses^^^^^^^引进curses.h 这个library或% /usr/5bin/cc [file.c] -lcurses -ltermlib(*注二)■如何开始我的第一个curses 程式?在开始使用curses 的一切命令之前, 您必须先利用initscr()这个函式来开启curses 模式.相对的, 在结束curses 模式前( 通常在您结束程式前) 也必须以endwin()来关闭curses 模式.#include <curses.h>main(){initscr();: :: :: :endwin();}这是一般curses 程式标准的模式.此外, 您可以就您程式所须, 而做不同的设定. 当然, 您可以不做设定,而只是呼叫initscr().您可以自己写一个函式来存放所有您所须要的设定. 平常使用时, 只要呼叫这个函式即可启动curses 并完成一切设定.下面的例子, 即是笔者将平常较常用的一些设定放在一个叫initial()的函式内.void initial(){initscr();cbreak();nonl();noecho();intrflush(stdscr,FALSE);keypad(stdscr,TRUE);refresh();}各函式分别介绍如下:□initscr()initscr() 是一般curses 程式必须先呼叫的函数, 一但这个函数被呼叫之後, 系统将根据终端机的形态并启动curses 模式.□endwin()curses 通常以呼叫endwin() 来结束程式. endwin() 可用来关闭curses 模式, 或是暂时的跳离curses 模式.如果您在程式中须要call shell ( 如呼叫system() 函式) 或是需要做system call,就必须先以endwin() 暂时跳离curses 模式. 最後再以wrefresh() doupdate() 来重返curses 模式.□cbreak()nocbreak()当cbreak 模式被开启後, 除了DELETE 或CTRL 等仍被视为特殊控制字元外一切输入的字元将立刻被一一读取.当处於nocbreak 模式时, 从键盘输入的字元将被储存在buffer 里直到输入RETURN或NEWLINE.在较旧版的curses 须呼叫crmode(),nocrmode() 来取代cbreak(),nocbreak()□nl()nonl()用来决定当输入资料时, 按下RETURN 键是否被对应为NEWLINE 字元( 如\n ).而输出资料时, NEWLINE 字元是否被对应为RETURN 和LINDFEED 系统预设是开启的.□echo()noecho()此函式用来控制从键盘输入字元时是否将字元显示在终端机上.系统预设是开启的.□intrflush(win,bf)呼叫intrflush 时须传入两个值:win 为一WINDOW 型态指标, 通常传入标准输出入萤幕stdscrbf 为TRUE 或FALSE当bf 为true 时, 当输入中断字元( 如break) 时, 中断的反应将较为快速.但可能会造成萤幕的错乱.□keypad(win,bf)呼叫keypad 时须传入两个值:win 为一WINDOW 型态指标, 通常传入标准输出入萤幕stdscrbf 为TRUE 或FALSE当开启keypad 後, 可以使用键盘上的一些特殊字元, 如上下左右等方向键, curses 会将这些特殊字元转换成curses.h 内定义的一些特殊键. 这些定义的特殊键通常以KEY_ 开头.□refresh()refresh() 为curses 最常呼叫的一个函式.curses 为了使萤幕输出入达最佳化, 当您呼叫萤幕输出函式企图改变萤幕上的画面时, curses 并不会立刻对萤幕做改变, 而是等到refresh() 呼叫後, 才将刚才所做的变动一次完成. 其馀的资料将维持不变. 以尽可能送最少的字元至萤幕上. 减少萤幕重绘的时间.如果是initscr() 後第一次呼叫refresh(), curses 将做清除萤幕的工作.■游标的控制move(y,x) 将游标移动至x,y 的位置getyx(win,y,x) 得到目前游标的位置(请注意! 是y,x 而不是&y,&x )■有关清除萤幕的函式clear()erase() 将整个萤幕清除(请注意配合refresh() 使用)■如何在萤幕上显示字元echochar(ch) 显示某个字元addch(ch) 显示某个字元mvaddch(y,x,ch) 在(x,y) 上显示某个字元相当於呼叫move(y,x);addch(ch);addstr(str) 显示一串字串mvaddstr(y,x,str) 在(x,y) 上显示一串字串相当於呼叫move(y,x);addstr(str);printw(format,str) 类似printf() , 以一定的格式输出至萤幕mvprintw(y,x,format,str) 在(x,y) 位置上做printw 的工作.相当於呼叫move(y,x);printw(format,str);■如何从键盘上读取字元getch() 从键盘读取一个字元(注意! 传回的是整数值)getstr() 从键盘读取一串字元scanw(format,&arg1,&arg2...) 如同scanf, 从键盘读取一串字元□例:int ch;char string1[80]; /* 请注意! 不可宣告为char *string1; */char string2[80];echo(); /* 开启echo 模式, 使输入立刻显示在萤幕上*/ch=getch();string1=getstr();scanw("%s",string2);mvprintw(10,10,"String1=%s",string1);mvprintw(11,10,"String2=%s",string2);■如何利用方向键curses 将一些如方向键等特殊控制字元, 以KEY_ 为开头定义在curses.h 这个档案里头, 如KEY_UP 即代表方向键的" ↑". 但, 如果您想使用curses.h 所为您定义的这些特殊键的话, 您就必须将keypad 设定为TRUE. 否则, 您就必须自己为所有的特殊键定义了.curses.h 为一些特殊键的定义如下:KEY_UP 0403 ↑KEY_DOWN 0402 ↓KEY_LEFT 0404 ←KEY_RIGHT 0405 →KEY_HOME 0406 Home key (upward+left arrow)KEY_BACKSPACE 0407 backspace (unreliable)KEY_F0 0410 Function keys.KEY_F(n) (KEY_F0+(n)) formula for f .KEY_NPAGE 0522 Next pageKEY_PPAGE 0523 Previous page以上仅列出笔者较常使用的一些控制键, 至於其他控制键的定义, 请自行参阅man curses (* 注三)一并为您列出其他常用的一些特殊字元[TAB] /t[ENTER] /r[ESC] 27[BACKSPACE] 127■如何改变萤幕显示字元的属性为了使输出的萤幕画面更为生动美丽, 我们常须要在萤幕上做一些如反白, 闪烁等变化. curses 定义了一些特殊的属性, 透过这些定义, 我们也可以在curses 程式□控制萤幕的输出变化.attron(mod) 开启属性attroff(mod) 关闭属性curses.h 里头定义了一些属性, 如:A_UNDERLINE 加底线A_REVERSE 反白A_BLINK 闪烁A_BOLD 高亮度A_NORMAL 标准模式(只能配合attrset() 使用)当使用attron() 开启某一种特殊属性模式後, 接下来在萤幕的输出都会以该种属性出现. 直到您呼叫attroff() 将此模式关闭.请注意, 当您欲attron() 开启另一种属性时, 请记得利用attroff()先关闭原来的属性, 或直接以attrset(A_NORMAL) 将所有特殊属性关闭.否则, curses 会将两种属性做重叠处理.□例:attrset(A_NORMAL); /* 先将属性设定为正常模式*/attron(A_UNDERLINE); /* 加底线*/ mvaddstr(9,10,"加底线"); /* 加底线输出一串字元*/attroff(A_UNDERLINE); /* 关闭加底线模式, 恢复正常模式*/attron(A_REVERSE); /* 开启反白模式*/ mvaddstr(10,10,"反白"); /* 输出一串反白字元*/attroff(A_REVERSE); /* 关闭反白模式, 恢复正常模式*/attron(A_BLINK); /* 开启闪烁模式*/mvaddstr(11,10,"闪烁"); /* 输出一串闪烁字元*/attroff(A_BLINK); /* 关闭闪烁模式, 恢复正常模式*/attron(A_BOLD); /* 开启高亮度模式*/ mvaddstr(12,10,"高亮度"); /* 输出一串高亮度字元*/attroff(A_BOLD); /* 关闭高亮度模式, 恢复正常模式*/■其他常用的一些函式beep() 发出一声哔声box(win,ch1,ch2) 自动画方框ch1: 画方框时垂直方向所用字元ch2: 画方框时水平方向所用字元example: box(stdscr,'|','-');将以| 及- 围成一个方框■应用完整□例下面所举的例子, 即完全利用刚刚所介绍的含式来完成.这个程式可将从键盘上读取的字元显示在萤幕上, 并且可以上下左右方向键来控制游标的位置, 当按下[ESC] 後, 程式即结束.您有没有发现, 这不就是一个简单全萤幕编辑器的雏形吗?#include <curses.h> /* 引进curses.h , 并自动引进stdio.h */#define StartX 1 /* 决定游标初始位置*/#define StartY 1void initial();main(){int x=StartX; /* 宣告x,y 并设定其初值*/int y=StartY;int ch; /* 宣告ch 为整数,配合getch() 使用*/initial(); /* 呼叫initial(), 启动curses模式, *//* 并完成其它设定*/box(stdscr,'|','-'); /* 画方框*/attron(A_REVERSE); /* 开启反白模式*/mvaddstr(0,20,"Curses Program"); /* 在(20,0) 处输出反白字元*/attroff(A_REVERSE); /* 关闭反白模式*/move(x,y); /* 将游标移至初始位置*/do { /* 以无限回圈不断等待输入*/ch=getch(); /* 等待自键盘输入字元switch(ch) { /* 判断输入字元为何*/case KEY_UP: --y; /* 判断是否"↑"键被按下*/break;case KEY_DOWN: ++y; /* 判断是否"↓"键被按下*/break;case KEY_RIGHT: ++x; /* 判断是否"→"键被按下*/break;case KEY_LEFT: --x; /* 判断是否"←"键被按下*/break;case '\r': /* 判断是否ENTER 键被按下*/++y;x=0;break;case '\t': /* 判断是否TAB 键被按下*/x+=7;break;case 127: /* 判断是否BACKSPACE 键被按下*/mvaddch(y,--x,' ');/* delete 一个字元*/break;case 27: endwin(); /* 判断是否[ESC]键被按下*/exit(1); /* 结束curses 模式*//* 结束此程式*/default:addch(ch); /* 如果不是特殊字元, 将此字元印出*/x++;break;}move(y,x); /* 移动游标至现在位置*/} while (1);}void initial() /* 自定开启curses 函式*/{initscr();cbreak();nonl();noecho();intrflush(stdscr,FALSE);keypad(stdscr,TRUE);refresh();}後记学完了上述的一些命令, 相不相信您已经可以写出一个漂亮的全萤幕编辑器了? 事实上, curses 提供的函式不下200 个, 可是笔者认为, 一切再复杂的函式都可以用本文提到的一些组合变化而成, 学了太多的函式, 只是徒增自己困扰罢了. 当然, 如果您对其它函式有兴趣, 可以自行参阅curses 说明档. ( 方法: % man curses ) 本文不过行抛砖引玉之效, 也希望未来能陆续出现更多同学自行创作的程式.* 任何疑问及建议, 欢迎e-mail 至ljh@.tw. 谢谢! *注一:请参考/usr/share/lib/termcup/usr/share/lib/terminfo/s/sun注二:1.如果是BSD 的版本, 需使用cc [file.c] -lcurses -ltermcap 来完成compile.2.计中工作站不知何故将原来的/usr/5bin/cc 更改为/usr/5bin/因此, 您若想在计中工作站compile curses 程式.需以/usr/5bin/cc.org取代/usr/5bin/cc , 否则compile 可能发生错误.3.较旧版的curses 需同时引进curses 和termlib 这两个library,因此, 您必须使用/usr/5bin/cc [file.c] -lcurses -ltermlib 来compile.注三:根据笔者的经验, 上下左右方向键应可正常使用而不会发生问题, 但其它如PgUp,PgDn,功能键,Home,End 等特殊键, 很容易因机器, 键盘不同而无法使用, 因此, 若您的程式须要在不同的机器上使用, 建议您只用方向键来控制, 其它的特殊键少用为妙.至於PgUp,PgDn 一些特殊键的控制方法, 由於较为复杂, 有兴趣的同学可参考tin 原始程式curses.c 内所使用的一些方法.。

Linux环境下 C语言编程实验报告

Linux环境下 C语言编程实验报告

西安邮电大学(计算机学院)课内实验报告实验名称: Linux环境下 C语言编程专业名称:网络工程班级:1203班学生姓名:学号(8位):指导教师:王亚刚实验日期:2014年12月3日一、实验目的(2)掌握gcc编译器使用方法。

(3)掌握gdb调试方法。

二、实验内容1.编辑测试源代码。

2. gcc编译测试源代码3. gdb调试和排错。

三、实验步骤1.编辑如下参考源代码,代码的原意为倒序输出main函数中定义的字符串#include <stdio.h>int display1(char *string);int display2(char *string);p iint main (){char string[] = "nnWelcom to Linux";display1 (string); display2 (string);}int display1 (char *string){printf ("The original string is %s \n", string);}int display2 (char *string1){char *string2;int size,i;size = strlen (string1);string2 = (char *) malloc (size + 1);for (i = 0; i < size; i++)string2[size - i] = string1[i];string2[size+1] = ' ';printf("The string afterward is %s\n",string2);}2.使用gcc将参考源代码编译为可执行文件。

3.运行可执行文件,观察运行结果并记录。

4.使用gdb调试程序,通过设置断点、单步跟踪,找出错误原因并记录。

Linux下的C编程实战

Linux下的C编程实战

一、开发平台搭建1.引言Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性。

而近年来,Linux操作系统在嵌入式系统领域的延伸也可谓是如日中天,许多版本的嵌入式Linux系统被开发出来,如ucLinux、RTLinux、ARM-Linux等等。

在嵌入式操作系统方面,Linux的地位是不容怀疑的,它开源、它包含TCP/IP协议栈、它易集成GUI。

鉴于Linux操作系统在服务器和嵌入式系统领域愈来愈广泛的应用,社会上越来越需要基于Linux操作系统进行编程的开发人员。

浏览许多论坛,经常碰到这样的提问:“现在是不是很流行unix/linux下的c编程?所以想学习一下!但是不知道该从何学起,如何下手!有什么好的建议吗?各位高手!哪些书籍比较合适初学者?在深入浅出的过程中应该看哪些不同层次的书?比如好的网站、论坛请大家赐教!不慎感激!”鉴于读者的需求,在本文中,笔者将对Linux平台下C编程的几个方面进行实例讲解,并力求回答读者们关心的问题,以与读者朋友们进行交流,共同提高。

在本文的连载过程中,有任何问题或建议,您可以给笔者发送email:21cnbao@,您也可以进入笔者的博客参与讨论:/21cnbao。

笔者建议在PC内存足够大的情况下,不要直接安装Linux操作系统,最好把它安装在运行VMWare 虚拟机软件的Windows平台上,如下图:在Linux平台下,可用任意一个文本编辑工具编辑源代码,但笔者建议使用emacs软件,它具备语法高亮、版本控制等附带功能,如下图:2.GCC编译器GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]options为编译选项,GCC总共提供的编译选项超过100个,但只有少数几个会被频繁使用,我们仅对几个常用选项进行介绍。

linux c语言好玩的代码

linux c语言好玩的代码

linux c语言好玩的代码Linux操作系统下的C语言编程提供了许多有趣的代码实现,让程序员们可以在编写代码的过程中获得乐趣与挑战。

本文将介绍一些有趣的Linux C语言代码示例,帮助读者更好地理解和掌握这些代码的实现原理。

一、彩色输出文本在Linux终端中,我们可以使用ANSI转义序列来实现彩色输出文本。

通过在输出文本前插入相应的转义序列,可以改变文本的颜色、背景色和样式。

下面是一个简单的示例代码,实现了在终端中输出彩色的 "Hello World!" 文本。

```c#include <stdio.h>#define COLOR_RED "\x1b[31m"#define COLOR_GREEN "\x1b[32m"#define COLOR_YELLOW "\x1b[33m"#define COLOR_BLUE "\x1b[34m"#define COLOR_MAGENTA "\x1b[35m"#define COLOR_CYAN "\x1b[36m"#define COLOR_RESET "\x1b[0m"int main() {printf(COLOR_RED "Hello " COLOR_GREEN "World!" COLOR_RESET "\n");return 0;}```在这段代码中,我们使用了一些预定义的ANSI转义序列来定义不同的颜色。

通过在输出文本前插入相应的转义序列,可以改变输出文本的颜色。

通过这种方式,我们可以在终端中实现彩色的输出效果。

二、生成随机数在C语言中,我们可以使用rand()函数生成一个伪随机数序列。

下面是一个简单的示例代码,实现了生成一个1到100之间的随机数。

C语言形界面编程使用形库创建窗口和界面

C语言形界面编程使用形库创建窗口和界面C语言图形界面编程:使用图形库创建窗口和界面在计算机编程中,图形界面是一种以图形方式显示和操作计算机程序的用户界面。

通过使用图形库,我们可以使用C语言创建窗口和界面,使程序更加直观和用户友好。

本文将介绍如何使用形库来实现C语言图形界面编程。

一、了解C语言图形编程的基本概念在开始学习C语言图形界面编程之前,我们需要了解几个基本概念:1. 形库(Graphics Library):形库是提供了一些函数和工具,用于创建、显示和操作图形元素的集合。

通过使用形库,我们可以在计算机屏幕上绘制图形、添加文本和图像等。

2. 窗口(Window):窗口是图形界面编程中的基本单元,用于显示程序的内容。

一个窗口可以包含多个界面元素,如按钮、文本框、下拉框等。

3. 界面元素(Interface Element):界面元素是构成图形用户界面的基本组成部分,如按钮、文本框、下拉框等。

通过操作界面元素,用户可以与程序进行交互。

二、选择合适的形库在C语言图形界面编程中,有多种形库可供选择。

常见的形库有:1. Windows API:用于Windows操作系统的图形库,提供了丰富的功能和界面元素。

2. GTK:跨平台的图形库,支持Linux、Windows等操作系统。

3. Qt:功能强大的图形库,支持多个操作系统。

根据项目的需求和开发环境,选择合适的形库是非常重要的。

在本文中,我们将以Windows API为例,介绍C语言图形界面编程的基本步骤。

三、使用Windows API创建窗口和界面下面是使用Windows API创建窗口和界面的基本步骤:1. 引入头文件和链接形库:首先,在C语言程序中引入相应的头文件和链接形库。

对于Windows API,我们需要包含windows.h头文件,并链接user32.lib库。

2. 定义窗口类:使用Windows API,我们需要定义一个窗口类。

窗口类包含窗口的属性和行为,如窗口标题、大小和消息处理函数等。

linux c编程

linux c编程引言linux的是一操作系统,其本质是一系列的任务调度,内存管理,虚拟文件系统等算法的集合.它告诉你的计算机怎么充分利用你机器上的资源.linux内核的源代码是用C语言写的(源代码也见于).C语言是一门编程语言,其本质是把一些C语言关键词描述的算法转换为计算机可以直接运行的二进制机器语言的整体.想把C语言写成的代码编译成二进制机器语言要使用C编译器(C compiler),C编译器是一个软件,它可以把C语言写成的代码转换成机器可以执行的二进制文件. 世界上有多款这样的软件,如gcc. linux内核及linux 环境下可用的所有软件都是用gcc编译的.简而言之,linux是一个操作系统,是一个各种应用程序工作的环境. linux的内核,即这个操作系统的核心代码,是用c语言编写,并用gcc编译的. linux内核是一套描述系统工作方式的算法,C语言是其实现途径. C语言也可以用来编译其它的代码。

Linux是目前非常流行的一款操作系统,而C语言是Linux操作系统中的核心语言,掌握Linux环境下的C语言开发有着非常重要的意义。

我们在linux下做任何事都离不开C。

现在也越来越流行unix/linux 下的c编程。

Linux系统下C语言及其编程环境Linux系统下C语言及其编程环境的介绍,系统编程的所有主题——文件和目录、进程、线程、信号、进程间通信、网络编程和图形界面编程、出错处理、库的创建与使用、编写安全的代码、数据结构、相关工具集、应用程序开发等。

linux C编译器的选择在Linux平台下,可用任意(默认VI)一个文本编辑工具编辑源代码,但笔者建议使用emacs软件,它具备语法高亮、版本控制等附带功能。

GCC编译器linux C下面gcc编译器的操作GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]options为编译选项,GCC总共提供的编译选项超过100个,但只有少数几个会被频繁使用,我们仅对几个常用选项进行介绍。

如何利用C语言进行图形化编程

如何利用C语言进行图形化编程在计算机编程领域,图形化编程一直是一个备受关注的话题。

图形化编程可以使程序更加直观、易于理解,同时也能提升用户体验。

虽然C语言是一种被广泛应用的编程语言,但是它本身并不擅长处理图形化界面。

然而,我们可以通过一些技巧和工具来利用C语言进行图形化编程。

一、使用图形库在C语言中,我们可以使用图形库来实现图形化编程。

图形库是一种提供了绘制图形和处理图形界面的工具集。

其中,最常用的图形库是OpenGL和SDL。

OpenGL是一个跨平台的图形库,它可以在多个操作系统上运行,并且支持3D图形的绘制。

而SDL是一个简单易用的图形库,它专注于2D图形的绘制和处理。

通过使用这些图形库,我们可以在C语言中轻松实现图形化界面的编程。

二、学习GUI框架除了使用图形库,我们还可以学习和使用GUI(图形用户界面)框架来进行图形化编程。

GUI框架是一种提供了一系列图形化界面组件和工具的软件库。

在C 语言中,常用的GUI框架有GTK+和Qt。

GTK+是一个开源的GUI框架,它提供了一套丰富的界面组件和事件处理机制,可以用于创建跨平台的图形化应用程序。

而Qt是一个跨平台的GUI框架,它提供了一套完整的界面组件和工具,可以用于创建高度可定制的图形化应用程序。

通过学习和使用这些GUI框架,我们可以在C语言中实现复杂的图形化界面。

三、结合其他编程语言除了使用C语言本身的特性和工具,我们还可以结合其他编程语言来进行图形化编程。

例如,我们可以使用C语言与Python进行集成,利用Python的图形化编程库来实现图形化界面。

Python拥有丰富的图形化编程库,如Tkinter和PyQt,它们提供了一系列易用的界面组件和工具。

通过使用C语言与Python的结合,我们可以充分发挥C语言的计算性能,同时又能利用Python的图形化编程库来实现图形化界面。

四、自定义图形化库如果我们对现有的图形库和GUI框架不满意,我们还可以自己开发一个图形化库。

Linux下的C语言编程实验报告

zhangshan
[root@localhost home]# echo $name1
zhang san
[root@localhost home]# echo $name2
zhang san
[root@localhost home]#
7.env系统变量
管理模式1
显示passwd中的第一列|命令
[root@localhost home]# cat /etc/passwd |cut -d ":" -f1
(.text+0x18): undefined reference to `main'
collect2: ld返回1
[root@localhost home]# . /a.out
bash: /a.out:没有那个文件或目录
[root@localhost home]# gcc test.c -o test.i
调用Linux的shell来执行<command string>,环境变量SHELL中定义的Linux的shell将会用来执行<command string>。如果SHELL没有定义,那就使用Linux的标准shell:/bin/sh(在Windows中使用或cmd.exe)。
Gcc的警告提示功能
gcc包含完整的出错检查和警告提示功能,它们可以帮助Linux程序员尽快找到错误代码,从而写出更加专业和优美的代码。先来读读例3-2所示的程序,这段代码写得很糟糕,仔细检查一下不难挑出如下毛病:
main函数的返回值被声明为void,但实际上应该是int;
使用了GNU语法扩展,即使用long long来声明64位整数,仍不符合ANSI/ISO C语言标准;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档