管道是半双工的,数据只能向一个方向流动,需要双方通信时,需要建立起两个管道。
管道只能用于父子进程或兄弟进程之间的通信。
管道的读写规则:管道两端可分别用描述字fd[0]以及fd[1]来描述。需要注意的是,管道两端是固定了任务的,即fd[0]只能用于读,fd[1]只能用于写。
int pipe_default[2];
void main()
{
pid_t pid;
char buffer[32];
memset(buffer, 0, 32);
/* 传入管道的两个文件描述符,之后就可以直接操作这两个文件描述符了 */
if(pipe(pipe_default) < 0)
{
printf("Failed to create pipe!\n");
return;
}
if(0 == (pid == fork()))
{
close(pipe_default[1]);
/* 延时,程序暂停若干时间,在Linux中,单位为秒 */
Sleep(5);
if(read(pipe_default[0], buffer, 32)>0)
{
printf("Receive data from server, %s!\n", buffer);
}
close(pipe_default[0]);
}
else
{
close(pipe_default[0]);
if(-1 != write(pipe_default[1], "hello", strlen("hello")));
{
printf("send data to client, hello!\n");
}
close(pipe_default[1]);
waitpid(pid, NULL, 0);
}
return;
}