★实验 9-2 1. 补全代码,实现以下功能 a) 调用pipe()创建无名管道 b) 调用fork创建一个子进程 c) 在父进程中向管道写入 “helloworld”, 同时打印出PID和写入
2017-07-16 21:27
656 查看
★实验 9-2 1. 补全代码,实现以下功能 a) 调用pipe()创建无名管道 b) 调用fork创建一个子进程 c) 在父进程中向管道写入 “helloworld”, 同时打印出PID和写入的字节数 d) 在子进程中调用execl()执行pipe_read e) pipe_read执行过程中读出管道中内容, 同时打印出PID、读出的字节数、读出的内容 // main.c #include <stdio.h> #include <string.h> #include <signal.h> #include <unistd.h> #include <sys/types.h> #include <fcntl.h> #include <stdlib.h> int main() { int p[2]; int ret=-1; char buffer[]="helloworld "; if( -1 == pipe(p)) { printf("pipe error!\n"); return -1; } if (fork() == 0) { sprintf(buffer, "%d", p[0]); execl("pipe_read", " pipe_read", buffer, (char *)0); exit(EXIT_FAILURE); } else { ret=write(p[1],buffer,sizeof(buffer)); printf("pid:%d write %d bytes\n",getpid(),ret); } exit(EXIT_SUCCESS); } // pipe_read.c #include <stdio.h> #include <string.h> #include <signal.h> #include <unistd.h> #include <sys/types.h> #include <fcntl.h> #include <stdlib.h> int main(int argc, char *argv[]) { int ret=-1; int fd; sscanf(argv[1], "%d", &fd); ret=read(fd,argv[1],argc*3); printf("pid:%d read %d bytes :%s\n",getpid(),ret,argv[1]); exit(EXIT_SUCCESS); }
相关文章推荐
- 实验 9-1 1. 实现以下功能 a) 调用 pipe()创建无名管道 b) 调用 fork 创建一个子进程 c) 在子进程中向管道内写入 128k 数据,打印出进程号及成功写入的字节数 d) 在父
- 1.实验 5.2.5 文件定位 用lseek()函数实现以下功能 1. 获取文件大小 2. 为文件添加指定长度的空洞 3. 在指定位置写入指定内容 4. 读出指定位置的内容 1. 获取文件大小
- linux中fork同时创建多个子进程的方法(一)
- main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能
- Fork同时创建多个子进程方法
- linux中fork同时创建多个子进程的方法(二)
- Linux 调用fork()创建两个子进程
- linux中fork同时创建多个子进程的方法(一)
- linux中fork同时创建多个子进程的方法
- 进程控制:linux中fork同时创建多个子进程注意事项
- 通过实例体会 fork()同时创建多个子进程
- fork同时创建多个子进程的方法
- 使用pipe()与fork()函数通过管道实现父子进程之间的通信
- Linux中fork同时创建多个子进程的方法(二)
- 代码实现打印功能(asp.net+javascript)
- ASP.NET中服务器控件Button调用javascript代码运用正则表达式验证TextBox中输入的是否为正整数或正小数,符合要求则继续运行服务器端代码功能的实现
- Linux下用fork()派生的子进程通过pipe管道通讯的实例详解("生产者-消费者"问题)
- 用vim实现C++代码的自动补全功能
- 追加同步写入代码以及同时OA与supesite采用不同的调用模式
- C# 中代码Dialog控件实现(打开,保存,改变字体,颜色,打印功能)