• PUDN用户
    了解作者
  • Unix_Linux
    开发工具
  • 45KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 76
    下载次数
  • 2005-09-27 11:27
    上传日期
Linux网络测试程序,有详细注释。(Linux进程间通信)
Linux进程间通信测试程序.zip
  • Linux进程间通信测试程序
  • example2-02.o
    2.4KB
  • example2-04.c
    1.8KB
  • example2-06
    5.9KB
  • example2-01.o
    1.2KB
  • example2-05.c
    2.8KB
  • example2-10.o
    1.1KB
  • example2-05.o
    2KB
  • example2-03.o
    2.1KB
  • example2-02.c
    2KB
  • example2-09
    5.3KB
  • example2-08
    5.2KB
  • example2-05
    6.5KB
  • example2-03.c
    3.5KB
  • Makefile
    277B
  • example2-10
    5.1KB
  • example2-09.c
    1.2KB
  • example2-01
    5.2KB
  • example2-01.c
    906B
  • example2-02
    7KB
  • example2-07
    5.2KB
  • example2-08.o
    1.2KB
  • example2-06.o
    1.6KB
  • example2-07.c
    1.2KB
  • example2-03
    6.5KB
  • example2-09.o
    1.2KB
  • example2-08.c
    1.4KB
  • example2-07.o
    1.1KB
  • example2-06.c
    1.9KB
  • example2-10.c
    949B
  • example2-04.o
    1.7KB
  • example2-04
    6.2KB
  • www.pudn.com.txt
    218B
内容介绍
/************************************************************* * 用FIFO实现进程间通信的例子example2-03.c example2-04.c ************************************************************/ /******************************************************************************************* * 因为FIFO不要求进程间有亲缘关系,服务器端就可以以众所周知的路径名创建一个FIFO,并打开来读。 * 此后,另外的客户进程就可以打开该FIFO来写,将消息通过FIFO传给服务器。但这只是一种单向的数据 * 传送,要实现双向的数据传送,可以每个客户进程在创建一个FIFO(可以用自己的进程ID来命名), * 从而在实现从服务器到客户端的通信。 *******************************************************************************************/ /******************************************************************************************* * 此例中客户端向服务器端发送一个路径名,服务器端去打开客户所请求的文件并返回文件内容,客户收 * 到回应后将文件内容打印到标准输出。服务器以路径名/tmp/fifo.serv来创建FIFO,并从此FIFO中读出 * 客户请求。而客户端都创建自己的FIFO,路径名以自己的进程号来标识。然后将自己的请求写入服务器 * 创建的FIFO中,二次请求中包含它的进程号和请求的路径名。服务器据此将相应的文件内容写回到该进 * 程创建的FIFO中,从而实现双向通信。 *******************************************************************************************/ /***************************************** * 服务器端程序example2-03.c *****************************************/ /*************************************************************************************************** 第53、54行两次用open()打开此FIFO文件,一次只读,一次只写。而第二次打开后获得的描述符从未使用。 这是因为,若只打开一次,那么每当一个客户终止时,该FIFO就会变空,服务器的read也会返回0,表示文件结束。 这样,就只能关闭次FIFO,然后再次调用read。但是这次会阻塞调用,直到下一个客户请求到为止。 如果总是有一个文件描述符被打开进行写操作,那么read函数就不会返回,而是一直阻塞直到有客户请求为止。 ***************************************************************************************************/ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #define SERV_FIFO "/tmp/fifo.serv" #define LINE 1024 #define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) int main() { int readf, writef, dummyfd, fd; char *ptr, buff[LINE], fifoname[LINE]; pid_t pid; //进程标识符 ssize_t n; /* create fifo use wellknow pathname */ if (((mkfifo(SERV_FIFO, FILE_MODE)<0) && (errno != EEXIST))) //未产生文件或文件不存在,则 printf("can't create fifo"); readf = open(SERV_FIFO, O_RDONLY, 0); /* open the fifo with read only mode */ dummyfd = open(SERV_FIFO, O_WRONLY, 0); /* open the fifo with write only mode */ while ((n = getline(buff, 100, readf)) > 0) { if (buff[n-1] == '\n') n--; /* delete the return character */ buff[n] = '\0'; /* end the pathname with null character */ if ((ptr = strchr(buff, ' ')) == NULL) { printf("bogus request: %s", buff); continue; } *ptr++ = 0; pid = atoi(buff); /* create the pathname of the client's fifo */ snprintf(fifoname, sizeof(fifoname), "/tmp/fifo.%ld", (long)pid); if ((writef = open(fifoname, O_WRONLY, 0)) < 0) { printf("cannot open: %s", fifoname); continue; } if ((fd = open(ptr, O_WRONLY)) < 0) { snprintf(buff + n, sizeof(buff) - n, ": can't open, %s\n",strerror(errno)); n = strlen(ptr); write(writef, ptr, n); /* write the file to the client's fifo */ close(writef); } else { while ((n = read(fd, buff, LINE)) > 0) write(writef, buff, n); close(fd); close(writef); } } exit(0); }
评论
    相关推荐
    • linux下进程通信实例
      linux下进程通信实例,要做操作系统作业的同学可以借鉴下,希望对您有所帮助。
    • Linux进程通信代码
      LinuxIPC通信代码,包含有匿名管道,命名管道,消息队列,信号量,信号,共享内存
    • Linux 进程隐藏
      NULL 博文链接:https://tcspecial.iteye.com/blog/2361998
    • linux 进程间通信
      嵌入式 linux进程间通信原理介绍 有详细的介绍
    • Linux进程线程编程
      这个资料是我精心寻找的一些LINUX进程线程方面的资料,包括了LINUX进程线程编程,进程间通信等内容,是学习LINXU系统编程比较好的而且容易理解的一些编程资料
    • linux进程间通信
      进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区
    • linux 进程调度
      linux 进程调度
    • Linux守护进程 Linux守护进程
      Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux守护进程Linux...
    • Linux下进程管理实验
      加深对进程概念的理解,明确进程和程序的区别. 进一步认识并发执行的实质. 分析进程争用资源的现象,学习解决进程互斥的方法. 了解Linux系统中进程通信的基本原理
    • linux进程调度图
      linux内核O(1)调度算法下进程之间的切换情况,注意,现在的linux使用的是绝对公平调度,和这个有比较大区别,