教案linux 进程间通信-管道.pptVIP

  1. 1、本文档共37页,可阅读全部内容。
  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文档。上传文档
查看更多
教案linux 进程间通信-管道

* 消费者程序 …… int open_mode = O_RDONLY; ……, getpid()); pipe_fd = open(FIFO_NAME, open_mode); printf(Process %d result %d\n, getpid(), pipe_fd); if (pipe_fd != -1) { do { res = read(pipe_fd, buffer, BUFFER_SIZE); bytes_read += res; } while (res 0); (void)close(pipe_fd); } …… * FIFO的应用(2) C/S应用程序 例:client.c, server.c 需要解决以下3个问题: 客户程序需要知道使用哪一个FIFO文件向服务器 进程提出请求。 服务进程需要知道通过那一个FIFO文件发送给客 户的回答消息。 在有多个客户进程写同一个FIFO的情况下,服务 进程要能够区分所读的数据是谁发送的。 * client.h #define SERVER_FIFO_NAME /tmp/serv_fifo #define CLIENT_FIFO_NAME /tmp/cli_%d_fifo #define BUFFER_SIZE 20 struct data_to_pass_st { pid_t client_pid; char some_data[BUFFER_SIZE - 1]; }; * server.c …… mkfifo(SERVER_FIFO_NAME, 0777); server_fifo_fd = open(SERVER_FIFO_NAME, O_RDONLY); …… sleep(10); do { read_res = read(server_fifo_fd, my_data, sizeof(my_data)); if (read_res 0) { tmp_char_ptr = my_data.some_data; * server.c(续) while (*tmp_char_ptr) { *tmp_char_ptr = toupper(*tmp_char_ptr); tmp_char_ptr++; } sprintf(client_fifo, CLIENT_FIFO_NAME, my_data.client_pid); client_fifo_fd = open(client_fifo, O_WRONLY); if (client_fifo_fd != -1) { write(client_fifo_fd, my_data, sizeof(my_data)); close(client_fifo_fd); } } while (read_res 0); …… * client.c …… server_fifo_fd = open(SERVER_FIFO_NAME, O_WRONLY); …… my_data.client_pid = getpid(); fprintf(stderr, Sorry, cant make %s\n, client_fifo); exit(EXIT_FAILURE); } * client.c(续) for (times_to_send = 0; times_to_send 5; times_to_send++) { sprintf(my_data.some_data, Hello from %d, my_data.client_pid); write(server_fifo_fd, my_data, sizeof(my_data)); client_fifo_fd = open(client_fifo, O_RDONLY); if (client_fifo_fd != -1) { if (read(client_fifo_fd, my_data, sizeof(my_data)) 0) {

文档评论(0)

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

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

1亿VIP精品文档

相关文档