嵌入式Linux08 进程管理.pptVIP

  1. 1、本文档共97页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式Linux08 进程管理

(2)管道的读写 写管道 write(管道名[1],buf,size); 读管道 read(管道名[0],buf,size); 参数说明:buf为程序中定义的字符型数组或缓冲区;size为读写的信息长度。 注意:管道为一临界资源,因此父子进程之间除了需要读写同步以外,在对管道进行读写操作时还需要互斥进入。 如果进程需要实现互斥,因为管道是文件,可以使用下述对文件上锁和开锁的系统调用: lockf(fildes, function, size); 参数说明: fildes是需加以封锁的文件描述符,此处可是管道的读写端口; function是功能选择,为1表示上锁,为0表示开锁; size表示锁定或开锁的字节数,其值为0则表示文件全部内容。 2.管道应用举例 例8.8 编写一个程序,实现以下功能。 (1)父进程使用系统调用pipe()建立一个管道; (2)创建两个子进程,分别向管道各发下面中一条信息后结束: This is the first message! This is the second message! (3)父进程从管道中分别接收两个子进程发来的消息并显示该消息,然后父进程结束。两个子进程的发送没有先后要求。 创建第一个子进程 父进程创建管道 对管道写端口上锁 子进程1把消息写入管道 创建第二个子进程 从读出口把第一条消息读出 把管道写端口解锁 对管道写端口上锁 子进程2把消息写入管道 例8.9 先创建一个管道,而后创建一个子进程。让子进程向管道里写数据,让父进程从管道读数据,程序在写和读之前都把不用的描述符关掉。 父进程创建管道 创建子进程 子进程关闭读取文件,并把一条消息写入管道 父进程关闭写入文件,并把管道内容读出到line,然后输出到标准输出。 8.3.3 命名管道(FIFO) 1.有名管道的创建 #include sys/types.h #include sys/stat.h int mkfifo(const char * pathname, mode_t mode); 函数的第一个参数是一个普通的路径名,即是创建后FIFO的名字。第二个参数与打开普通文件的open()函数中的mode参数相同。 若mkfifo的第一个参数是一个已经存在的路径名时,返回EEXIST错误,如果确实返回该错误,则只要调用打开FIFO的函数。一般文件的I/O函数都可用于FIFO,如close、read、write等。 2. 有名管道的打开规则 有名管道比管道多了一个打开操作:open。 在创建管道成功之后,就可以使用open、read、write这些函数了。与普通文件的开发设置一样,对于为读而打开的管道可在open中设置O_RDONLY,对于为写而打开的管道可在open中设置O_WRONLY,在这里与普通文件不同的是阻塞问题。 由于普通文件的读写时不会出现阻塞问题,而在管道的读写中却有阻塞的可能,这里的非阻塞标志可以在open函数中设定为O_NONBLOCK。下面分别对阻塞打开和非阻塞打开的读写进行一定的讨论。 FIFO的打开规则 如果当前打开操作是为读而打开FIFO时,若已经有相应进程为写而打开该FIFO,则当前打开操作将成功返回;否则,若为读而进行的当前打开操作设置了阻塞标志将被阻塞直到有相应进程为写而打开该FIFO;或者,若当前打开操作没有设置阻塞标志,则成功返回。 如果当前打开操作是为写而打开FIFO时,如果已经有相应进程为读而打开该FIFO,则当前打开操作将成功返回;否则,若为写而进行的当前打开操作设置了阻塞标志将被阻塞直到有相应进程为读而打开该FIFO;或者,若当前打开操作没有设置阻塞标志返回ENXIO错误。 3. 有名管道的读写规则 对于读进程 若该管道是阻塞打开,且当前FIFO 内没有数据,则对读进程而言将一直阻塞直到有数据写入。 若该管道是非阻塞打开,则不论FIFO 内是否有数据,读进程都会立即执行读操作。 对于写进程 若该管道是阻塞打开,则写进程将一直阻塞直到有读进程读出数据。 若该管道是非阻塞打开,则当前FIFO 内没有读操作,写进程都会立即执行读操作。 函数名和对应语法总结 int execl(const char *path, const char *arg, ...) 例 下面是一个fork()结合exec()的程序实例forkexec.c #include sys/types.h #include unistd.h main() { int pid; pid = fork(); switch(pid) {case -1: perror(fork failed); exit(1); case 0:

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档