进程及进程间的通信.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程概念; 进程的控制: 生成一个进程:fork 进程的同步:wait waitpid 进程的退出:exit _exit 进程“脱胎换骨”:exec函数族 进程通信 进程为什么需要通信? linux下进程如何通信 早期的unix通信方式 无名管道;有名管道;信号 sysem v的通信方式:共享内存、消息队列、信号量 BSD的通信方式:socket 无名管道:适用于有血缘关系进程通信 小任务1:父进程通过无名管道向子进程发送字符串“Hello,you man!”,子进程接收到后显示出来,然后子进程退出,最后父进程退出。 创建子进程:fork 创建管道 #include unistd.h int pipe(int pipefd[2]); 参数说明(当管道创建成功后): pipefd[0]:读端的文件描述符; pipefd[1]:写端的文件描述 返回值:0表示创建成功,-1表示创建失败 父亲写管道 write 儿子读管道 read 父亲等待儿子退出 wait 参考代码: #include unistd.h #include stdio.h #include fcntl.h #include sys/types.h #include string.h int main() { int pid; int pipefd[2]; int ret; char buf[]=Hello,young man!; ret=pipe(pipefd);//创建管道(1) if(ret0) { perror(Failed to create pipe:); return -1; } pid=fork(); //能够把(1)语句放此注释的下一样?? if(pid0) { perror(Failed to create child process:); return -1; } if(pid0) { close(pipefd[0]);//父进程中关闭无关的读端 write(pipefd[1],buf,strlen(buf)); wait(NULL); printf(Parent process exit!\n); } else { char receive_buf[100]; int count; close(pipefd[1]);//子进程中关闭无关的写端 count=read(pipefd[0],receive_buf,100); if(count0) { receive_buf[count]=\0; printf(Child process receive a string:%s\n,receive_buf); } printf(Child process exit!\n); } return 0; } 有名管道(fifo) 文件系统中可见,可以通过mkfifo 命令来创建一个有名管道 eg: mkfifo -m 0666 myfifo 有名管道的使用跟普通文件一样:open read write close,不用使用lseek!!!! 任务2: 进程1通过有名管道把键盘输入字符串发送给进程2,进程2收到后显示出来,当收到字符串“exit”是退出程序!! 手工建立一个有名管道myfifo 打开管道; 读写管道 注意:有名管道的读写跟普通文件没有什么区别!! 参考代码: //fifoReader.c #include unistd.h #include stdio.h #include fcntl.h #include sys/types.h #include string.h int main() { int fd; char buf[128]; fd=open(/home/gec/myfifo,O_RDONLY); if(fd0) { perror(Failed to open fifo:); return -1; } while(1) { int count; count=read(fd,buf,127); if(count0) { buf[count]=0; printf(fifoReader receive a string:%s\n,buf); } if(strncmp(buf,exit,4)==0) { break; } } close(fd); return 0; } //fifoWrite.c #include unistd.h #include stdi

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档