一. 实验内容 1.编写一个程序,实现在两个进程之间运用管道进行通讯。程序中创建一个子进程,然后父、子进程各自独立运行。父进程不断地在标准输入设备上读入小写字母,写入管道。子进程不断地从管道中读取字符,转换为大写字母后输出到标准输出设备上。当读到x时,结束。 2. 观察程序输出的结果,并做出合理的解释。 相关的系统调用或函数:fork() pipe() write() read(); |
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<sys/types.h> int main(void) { int result=-1; int fd[2]; int nbytes; pid_t pid; char string[100]; char readbuffer[1000]; int *read_fd=&fd[0]; int *write_fd=&fd[1]; //建立管道 result=pipe(fd); if(-1==result) { printf("fail to create pipe\n"); return -1; } pid=fork(); if(-1==pid) { printf("fail to fork\n"); return -1; } if(0==pid) //子进程 {int i=0; close(*read_fd); scanf("%c",&string[0]); while(string[i]!='x') { i++; scanf("%c",&string[i]); } result=write(*write_fd,string ,strlen(string)); return 0; } else{ //父进程 close(*write_fd); nbytes=read(*read_fd,readbuffer,sizeof(readbuffer)); printf("the parent receive data:"); for(int i=0;readbuffer[i]!='x';i++) { readbuffer[i]=readbuffer[i]+'A'-'a'; printf("%c ",readbuffer[i]); }
} return 0;
} |
1. |