无名管道系统调用
#include
#include
#include
#include
#include
#include
#define MAX 256
#define DELAY 1
int main()
{
pid_t pid;
int pipe_fd[2]; //定义两个文件描述符
char buf[MAX]; //定义缓冲区大小
const char data[] = "Pipe Test Program"; //定义数据
int real_read,real_write;
memset((void*)buf,0,sizeof(buf)); //清空内存区
if(pipe(pipe_fd) < 0) //创建管道
{
printf("pipe create error/n");
exit(1);
}
if((pid = fork()) == 0) //创建一子进程
{//子进程关闭写描述符,并通过子进程暂停1s等待父进程已关闭相应的读描述符
close(pipe_fd[1]);
sleep(DELAY * 3);
if((real_read = read(pipe_fd[0],buf,MAX)) > 0) //子进程读取管道内容
{
printf("%d bytes read from the pipe is '%s'/n",real_read,buf); }
close(pipe_fd[0]); //关闭子进程读描述符
exit(0);
}
else if(pid > 0)
{//父进程关闭读描述符,并通过使使父进程暂停1s等待子进程已关闭相应的写描述符
close(pipe_fd[0]);
sleep(DELAY);
if((real_write = write(pipe_fd[1],data,strlen(data))) != -1) //父进程写入管道内容
{
printf("Parent wrote %d bytes:'%s'/n",real_write,data);
}
close(pipe_fd[1]); //关闭父进程写描述符
waitpid(pid,NULL,0); //收集子进程退出信息
exit(0);
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.