23,216
社区成员




#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#define K 1024
#define writelen (12*K)
int main(){
int result = -1;
int fd[2],nbytes;
char string [writelen] = "你好,管道~!";
char readbuffer[10*K];
int * write_fd = &fd[1];
int * read_fd = &fd[0];
result = pipe(fd);
if(-1 == result){
printf("管道建立失败~!\n");
return -1;
}
int pid = fork();
if( -1 == pid ){
printf("fork 进程失败\n");
return -1;
}
if(0 == pid){
int write_size = writelen;
printf("pid[%d] write_size is [%d]i\n",getpid(),write_size);
result = 0;
close(*read_fd);
while(write_size > 0){
result = write(*write_fd,string,write_size);
printf("pid[%d] result is [%d]i\n",getpid(),result);
if(result > 0){
write_size -= result;
printf("pid[%d] 写入 %d 个数据, 剩余 %d 个数据\n",getpid(), result, write_size);
} else {
printf("pid[%d] sleep ----\n",getpid());
sleep(10);
}
}
printf("pid[%d] : 退出 \n",getpid());
return 0;
} else {
close(*write_fd);
printf("pid[%d] i---------------------\n",getpid());
while(1) {
printf("pid[%d] i---------------------\n",getpid());
nbytes = read(*read_fd,readbuffer,sizeof(readbuffer));
if(nbytes <= 0){
printf("pid[%d] 没有数据写入 \n",getpid());
break;
}
printf("pid[%d] : 接收到%d个数据,内容为:\"%s\" \n",getpid(),nbytes,readbuffer);
}
printf("pid[%d] : 退出 \n",getpid());
return 0;
}
return 0;
}