我的嵌入式Linux应用开发之路(第二版),在《我的嵌入式Linux应用开发之路(v1.0)》版本上,添加了关于Linux白皮书的相关资料。至此,Linux系统编程告一段落,相信大家学完这一套资料之后,在Linux应用编程上,会有一个全新的认识,后续我会总结ARM、系统编程和驱动的相关知识,希望大家喜欢!我的嵌入 rC linux学习之旅追风忆梦QQ:1028150787LINX静态库和共享库389LINUX静态库和动态库(网转1).,,,,,,,,398LINx中创建静态库和动态库(网转2)404第五章 LINUX进程线程编程,b看鲁鲁●D,,,410第一天第二天124第三天..,,430第四天.曹垂p,,,,,,,,,,,,,,,,,,,444第五天..463LNX进程基本概念497进程的创建及相关API,,,,,,501LNX进程地址空间的一步步探究..,,.526SYSTEM函数的实现,534多线程编程36线程的应用,,,,,.,...559信号处埋函数,,566LINUX多线程及信号处理.573进程间通信管道,,593简单的PIPE管道,610步步探究LNuX进程中的用户ID612FIFo简单的C/S模型,620复杂CS模型.623共享内存读写(采用信号量进行同步互斥)630SYSTEM V IPC对象信号灯集637消息队列实现群聊功能649消息队列实现类似Q功能,,,6612013年10月12日于荆楚理工学院我的嵌入 rC linux学习之旅追风忆梦QQ:1028150787第一章C语言加深编程环境搭建、系统安装我使用的是Ⅴ Mware8的 ubuntu12.04,这是培训老师说的,1204相对来说,比较新,而且是5年长期支持版,不容易过时。对于系统的安装,我不想说很多,只是希望大家主义这几点:1虚拟机的卸载要注意,要卸载干净,不然,下次会安装失败!至于怎么卸载,百度上很多。2.安装好系统之后,首先要装好虚拟机工具,具体的安装方法见我的另外篇博客《关于虚拟机工具 VMwareTools》。3.安装好了之后,注意 ubuntu要换源,不然很多东西都下载不了,而且速度很慢。这里给出一个相对来说比较好的源,是官方的debhttp:/archive.ubuntucom/ubuntu/precisemainrestricteduniversemultiversedebhttp:/archive.ubuntu.com/ubuntu/precise-securitymainrestricteduniversemultiversedebhttparchiveubuntucom/ubuntu/precise-updatesmainrestricteduniversemultiversedebhttp:/archive.ubuntucom/ubuntu/precise-proposedmainrestricteduniversemultiversedcbhttp://archive.ubuntucom/ubuntu/precise-backportsmainrestricteduniversemultiversedeb-srchttp:/archive.ubuntu.com/ubuntu/precisemainrestricteduniversemultiversedeb-srchttp:/archive.ubuntucom/ubuntu/precise-securitymainrestricteduniversemultiversedeb-srchttp:/archive.ubuntu.com/ubuntu/precise-updatesmainrestricteduniversemultiversedeb-srchttp://archive.ubuntu.com/ubuntw/precise-proposedmainrestricteduniversemultiversedeb-srchttp:/archive.ubuntucom/ubuntu/precise-backportsmainrestricteduniversemultiverse换好源之后,别忘了执行 sudo apt-get update更新一下!4.设置 ubuntu与 windows的共享文件夹,如 share,以方便操作。一般来说,我习惯把共享文件夹和360云盘或者百度网盘相关联,然后在共享文件夹里面敲代码。这样,每次敲完代码,就自动上传到网盘上,就相当于自动备份了,反正现在360和百度正在打架,它们的网盘那么大,怕什么,随便存放!看我转发我们C语言培训文老师的那篇《 Linux静态IP设置(im)v2.0),参5.对于联网问题,希望大家使用桥接,而且使用静态I,具体的设置5.如果大家嫌 VMware配置很麻烦,也可以用VBOX或者直接安装,这样比较简单2013年10月12日于荆楚理工学院我的嵌入 rC linux学习之旅追风忆梦QQ:1028150787、Ⅵ配置现在开始配置vm了, ubuntu自带的vim虽然也可以用,但是对于一些高级设置,如语法高亮,自动补齐功能不是太好,我在华清远见的老师给了我们一个配置脚本,现在给大家参考一下。配置好之后的效果大家可以看一下:se0 ubuntu@fancong: - /share/School Study/Linux_Io1 include
2 include 34 int main(int argc, const char *argv[])5{6789char buf[MAXLINElpid t pidint status i10printf("s")11while(fgets(buf, MAXLINE tlin))13if(buf[strlen(bufn")14buf[strlen(buf)-1|=01首先,安装vin增强工具 ctags,直接使用 sudo apt- get install ctags安装即可。安装好了之后,使用鮮压附件中的 ieffy-vim-v2.0文件,执行 install确认,然后在主目录下输入ⅵ. vimrc注意, vimrc前面有一个点,找到 Setting colorscheme,在ⅵ中直接输入 color回年,然后输入i进入插入模式,在 Setting colorscheme前面加上双引号,注释掉这条语句,如图:ayDurested201o-01-017 " Lastchange: 2010-04-2289+55GENERAL SEPINGS64+9行: AUTO COMMANDS:73+--19 1: SHORTCUT SETTINGS:92+--82: PLUGIN SETTINGS:amrc16,11-1底端/c。1or至此,我们的vim的大体工作完成,但是我们也许习惯了 Eclipse屮的那种智能给出提小的功能,就是当我们使用某个系统调用的时,输入一个系统的结构体,打一个点或者一个箭头,就会自动的给出对应的成员函数或者变量,放心,我们的vim也有这个功能,如图:2013年10月12日于荆楚理工学院我的嵌入 rC linux学习之旅追风忆梦QQ:1028150787t include 3 int main(int argc, const char *argv[])FILE *fp;fpIo backup base m IO FILEret Io buf basem+工 O FILE9}Io buf endm IO FILEIo read base m IO FILEIo read endm+工oFIEIo read ptrm+工oFIEIo save base m IO FTLEIo save endm+ IO FILE工 o write base m+ DO FITATo write end m+ToH⊥LF这点,大家要感谢我们的草根老师程老师∫,还是按照上面的方法,解压附件中的 vimconfigtar.bz2,并运行。也许会有几个警告,直接忽略即可。注意,大家在执行这个脚本的时候,如果遇到找不到cas的时候,要记得正确安装上面的ctas工具才行! ctags离线包在附件 exuberant- ctags5.9-sVn20110310-6s4dcb中,大家直接执行 sudo dpkg-i*,deb即可。终于将vim配置完工,可以放心使用了!实际上vm的功能还很多,大家可以在使用的过程屮慢慢体会、man手册着色在linuⅸ系统编程的时候,除了一个好的编辑器之外,还需要一个好的资料査询助手,那就是 linux自带的“百科全书”——man手册,man手册包含了我们需要的所冇的系统调用以及所冇的接凵和命令的解释,我们可以直接在ⅵi的命令行中输入Man3stat回车后,ⅵ自动给出stat的函数原型和返回值等一系列的相关解释,我们老师常说,man手册是最好的老师!但是,man手册能不能像ⅵi一样,对语法进行相应的高亮显示呢?答案是肯定的,具体的操作有:用ⅵ或者其他编辑器打开~/ bashrc文件并加入如下内容:Set colors for man pagesenvLESS TERMCAP mb=s(printf e[l; 31m")LESS TERMCAP md=S(printf "e[ 1; 31m)LESS TERMCAP me=(printf"e[Om )VLESS TERMCAP Se-S(printf e[om")LESS TERMCAP So=S(printf"e[1; 44; 33m")LESS TERMCAP ue=s(printf elOm").2013年10月12日于荆楚理工学院我的嵌入 rC linux学习之旅追风忆梦QQ:1028150787LESS TERMCAP us-S(printf"e[1; 32m)man"@a配置完环境变量之后,别忘了使之有效,执行下列命令或者重启电脑:source/etc/ bash. bashrc或者 source~/ bashrc其实 source可以换成点重新打开终端,现在执行man就有颜色了。se0 ubuntuofancongLS(1)User Command sLS(1)ls list directory contentsISYNOPSISLs [OPTION].. [FILE]DESCRIPTIONList information about the FILes the current directory by default)Sort entries alphabetically if none of -cftuvsuXsort 1s speclfiedMandatory arguments to Long options are mandatory for short optionstoo-alldo not ignore entries starting withA,--almostalLdo not list implied, and.authorManual page Ls(1) Line 1 (press h for heLp or q to quit)2013年10月12日于荆楚理工学院我的嵌入 rC linux学习之旅追风忆梦QQ:1028150787第一天首先声明一下,在我们写的程序中,会使用到一个头文件# include< head, h>因为,在 linux系统编程的时候,会用到很多头文件,为此,我用一个头文件全部包含在一起,头文件内容如下:ifndef oKdefine OKinclude include include include include include < sys/types. h>include include include < sys/types. h>include t include f include include t include semaphore. h>include t include t include include include f include include #define LOG(.)(char bf[ 1024]: snprintf( bf, sizeof( bf), VA ARGS;fprintf(stderr, %s", bf); syslog(LOG ERR, %s",bf); 3#endif编辑好了之后,放到/ sr/include/卜即可1.使用FLLE, FUCTION,LINE等宏能自动定位到程序执行到哪个函数的哪一行,作为一个经典的调试方法,很容易被人忽略,也很重要。如下:include < h>void testoprintf("%os %s%dn", FiLe, FUNCTION, LINE);2013年10月12日于荆楚理工学院我的嵌入 rC linux学习之旅追风忆梦QQ:10281507870printf("%os %s %odin" File, FUNCTION, LINE )int mainoprintf(+2+3+4+5+6+7+8+9+10=%dn",1+2-3+4+5-6+7+8+9+10printf("%us %s%dn", FiLE, Function LINEreturn打印+2+3+4+5+6+8+9+10=55test. c main 17test. c test 1 10test. c test 52.对于 malloc动态内存分配,现在只是给出一个实例,让大家有一个感性的认识,要知道 malloc主要用来动态开辟内存空间的,一般 malloc都是和free配对的。以后会专门讲解的。下面的个实例是动态开辟个·维数组,比较简单。include f include stdlib.h>void input(int*array, int lenprintf("input %d numbers,len);for(i=0; iint maininta[5}={0x1011213.0x20212223.0x30313233,0X404142430x50515253}printf("a[5}-{0x10111213,0x20212223,0x30313233,0x40414243,0x50515253}");printf( na=%pn&a=%pin", a, &a)2013年10月12日于荆楚理工学院