★实验 9-2 1.补全代码,实现以下功能 a)调用pipe()创建无名管道 b)调用fork创建一个子进程 c)在父进程中向管道写入 “helloworld”, 同时打印出PID和写入

来源:互联网 发布:ubuntu怎么进入文件夹 编辑:程序博客网 时间:2024/05/29 23:22
★实验 9-2  1.补全代码,实现以下功能a)调用pipe()创建无名管道b)调用fork创建一个子进程c)在父进程中向管道写入 “helloworld”, 同时打印出PID和写入的字节数d)在子进程中调用execl()执行pipe_reade)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);}

阅读全文
0 0
原创粉丝点击