Linux中父子进程之间的通信
2018-06-18 04:12:31来源:未知 阅读 ()
在Linux系统中实现父子进程的通信可以采用pipe()和fork()函数进行实现。利用两个管道在父子进程之间进行通信如:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<sys/types.h> 4 #include<unistd.h> 5 #include<string.h> 6 int main(void){ 7 pid_t pid; 8 int i=0; 9 int result = -1; 10 int fd[2],nbytes; 11 char string[] = "你好,管道";//对string数组初始化 12 char readbuffer[80]; 13 int *write_fd = &fd[1]; 14 int *read_fd = &fd[0]; 15 printf("Please input data:"); 16 scanf("%s",string); 17 result = pipe(fd); 18 if(-1 == result) 19 { 20 printf("建立管道失败!\n"); 21 return -1; 22 } 23 24 pid=fork(); 25 if(-1 == pid) //此处为了验证父子进程是否创建成功,如果未创建成功,则返回-1 26 { 27 printf("进程创建失败!\n"); 28 return -1; 29 } 30 else if(0 == pid) 31 { 32 close(*read_fd); 33 result = write(*write_fd,string,strlen(string)); 34 return 0; 35 } 36 else 37 { 38 close(*write_fd); 39 nbytes = read(*read_fd,readbuffer,sizeof(readbuffer)-1); 40 printf("接收了%d个数据,内容为:\"%s\"\n",nbytes,readbuffer); 41 } 42 return 0; 43 }
对于父子进程,在程序运行时首先进入的是父进程,其次是子进程,在此我个人认为,在创建父子进程的时候程序是先运行创建的程序,其次在复制父进程创建子进程。
fork()函数主要是以父进程为蓝本复制一个进程,其ID号和父进程的ID号不同。对于结果fork出来的子进程的父进程ID号是执行fork()函数的进程的ID号;
例如:
父进程, fork返回值是:17025 ID:17024 ,父进程ID:16879
子进程, fork返回值是:0, ID:17025 ,父进程ID:17024
pipe()函数是创建管道函数,在管道创建成功时,函数返回值是0;在管道创建失败是,函数返回值是-1;
(有什么错误希望各位指出,本人定会改正,谢谢各位的阅读)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:二级c程序设计题(1)
下一篇:PAT/简单模拟习题集(二)
- Building & Debugging chromium on CLion for Linu 2020-05-19
- CreateEvent进程同步 2020-04-19
- 非常详细的 Linux C/C++ 学习路线总结!已拿腾讯offer 2020-03-29
- linux环境下的时间编程 2020-03-27
- windows上编译linux程序代码需要用到的头文件 2020-03-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash