?? pipe.c
字號:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
//子進程讀數據
void read_data(int pipes[])
{
int c;
int rc;
//關閉寫的一端
close(pipes[1]);
//讀數據并打印
while ((rc = read(pipes[0], &c, 1)) > 0)
{
putchar(c);
}
exit(0);
}
//父進程寫數據
void write_data(int pipes[])
{
int c;
int rc;
//關閉讀數據一端
close(pipes[0]);
//從控制臺讀數據并向管道寫數據
while ((c = getchar()) > 0)
{
rc = write(pipes[1], &c, 1);
if (rc == -1)
{
perror("Parent: write");
close(pipes[1]);
exit(1);
}
}
//關閉寫一端
close(pipes[1]);
exit(0);
}
int main(int argc, char*argv[])
{
int pipes[2];
pid_t pid;
//fork返回的進程號
int rc;
//返回值
//建立管道
rc = pipe(pipes);
if (rc == -1)
{
perror("pipe");
exit(1);
}
//建立子進程
pid = fork();
switch(pid)
{
//失敗
case -1:
perror("fork");
exit(1);
//子進程
case 0:
read_data(pipes);
//不能到這里
//父進程
default:
write_data(pipes);//不能到這里/
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -