[英]Pipes IPC in C now
出於自我學習的目的,我想將2個程序與管道連接起來。 第一個程序接受輸入,使其上方並打印到屏幕,在此示例中,第一個程序被執行,但沒有輸入輸出。 我如何在第二個程序中更改管道close()函數以獲取結果。
寫入后立即關閉輸出管道,或者在每次寫入字符后將第一個程序修改為fflush(stdout)(由於std(in | out)的緩沖性質,第二個程序在讀取時卡住,第一個程序等待輸入,因為它沒有獲得EOF) -第二個程序的close()將EOF發送到第一個,第一個終止,並在終止時自動刷新stdout)。
int main(int argc, char** argv) {
pid_t pid;
int fi[2];
int fo[2];
char c;
if (pipe(fi) < 0)
perror("pipe");
if (pipe(fo) < 0)
perror("pipe");
switch ( fork() ) {
case -1:
exit(1);
case 0:
dup2(fi[0], STDIN_FILENO);
close(fi[1]);
dup2(fo[1], STDOUT_FILENO);
close(fo[0]);
execlp("pipes1", "pipes1",(char *)NULL);
default:
close(fi[0]);
close(fo[1]);
break;
}
write(fi[1], "t", 1);
close(fi[1]);
read(fo[0], &c, 1);
printf("%c\n", c);
close(fo[0]);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.