实验二进程通信 Linux实验报告.docxVIP

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

实验报告学号_____ 姓名_______ 成绩实验二进程通信【实验目的和要求】1、了解进程通信的概念及方法;2、了解信号量、管道;3、掌握信号量、管道和命名管道编程方法。【实验内容】1、利用命名管道实现单机QQ聊天;2、撰写实验报告;【实验原理】1、信号量(semaphore)是为那些访问相同资源的进程以及同一进程不同线程之间提供的一个同步机制。它不是用于传输数据,而只是简单地协调对共享资源的访问。信号量包含一个计数器,表示某个资源正在被访问和访问的次数,用来控制多进程对共享数据的访问。一旦成功拥有了一个信号量,对它所能做的操作只有两种:请求和释放。当执行释放操作时,系统将该信号值减1(如果小于零,则设置为零);当执行请求操作时,系统将该信号值加1,如果加1后的值大于设定的最大值,那么系统将会挂起处理进程,直到信号值小于最大值为止。Tuxedo用信号量来确保在某一时刻只有一个进程对某一块共享内存进程访问。信号量配置太低会导致Tuxedo系统应用程序无法启动。2、管道分为两种:管道和命名管道。管道是UNIX系统IPC的最古老形式,并且所有的UNIX系统都提供这种通信机制。可以在有亲缘关系(父子进程或者是兄弟进程之间)进行通信,管道的数据只能单向流动,如果想双向流动,必须创建两个管道。管道应用的一个重大缺陷就是没有名字,因此只能用于亲缘进程之间的通信。后来以管道为基础提出命名管道(named pipe,FIFO)的概念,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,通过FIFO不相关的进程也能交换数据。值得注意的是,FIFO严格遵循先进先出(first in first out)规则,对管道及FIFO的读总是从开始处返回数据,对它们的写则是把数据添加到末尾。它们不支持诸如lseek()等文件定位操作。【程序代码】1、lucy.c#includestdio.h#includesys/stat.h#includestring.h#includesys/types.h#includeerrno.h#includefcntl.h#includeunistd.h#includestdlib.hchar write_fifo_name[]=ltop_fifo;char read_fifo_name[]=ptol_fifo;char writer[]=Lucy;char reader[]=Peter;int main(int argc,char *argv[]){int write_fd,read_fd;mkfifo(write_fifo_name,S_IRUSR|S_IWUSR);mkfifo(read_fifo_name,S_IRUSR|S_IWUSR);printf(hello,I am lucy!\n);write_fd=open(write_fifo_name,O_WRONLY);if(write_fd0){perror(open_w);exit(-1);}read_fd=open(read_fifo_name,O_RDONLY);if(read_fd0){perror(open_r);exit(-1);}pid_t pid;pid=fork();if(pid==0){ while(1) {char bufw[256]=;printf(%s:,writer);if(fgets(bufw,256,stdin)==NULL) exit(1); bufw[strlen(bufw)-1]=\0;write(write_fd,bufw,strlen(bufw));if(strncmp(bufw,bye,3)==0){close(write_fd);unlink(write_fifo_name);exit(1);} }}else{while(1){char bufr[256]=;read(read_fd,bufr,256);printf(\r%s:%s\n,reader,bufr);if(strncmp(bufr,bye,3)==0){write(write_fd,bye,4);close(read_fd);unlink(read_fifo_name); exit(1);}printf(%s:,writer);fflush(stdout);}}return 0;}2、peter.c#includestdio.h#includesys/stat.h#includestring.h#includesys/typ

文档评论(0)

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

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

1亿VIP精品文档

相关文档