因此,当我在C中学习管道编程时,我决定注释掉开放的管道()代码,看看会发生什么,结果肯定不是我的预期。
这是代码
#include <stdio.h>
#include <unistd.h>
#define MSGSIZE 16
char *msg1 = "Hello, World #1";
char *msg2 = "Hello, World #2";
char *msg3 = "Hello, World #3";
int main(void) {
char inbuf[MSGSIZE];
int p[2], j;
/* if (pipe(p) == -1) { */
/* perror("pipe call"); */
/* exit(0); */
/* } */
write(p[1], msg1, MSGSIZE);
write(p[1], msg2, MSGSIZE);
write(p[1], msg3, MSGSIZE);
for (j = 0; j < 3; j++) {
read(p[0], inbuf, MSGSIZE);
printf("%s\n", inbuf);
}
exit(0);
}
以下是该计划的输出:
Hello, World #1Hello, World #2Hello, World #3^C
在Emacs shell中,输出更加奇特
Hello, World #1^@Hello, World #2^@Hello, World #3^@
所以我理解0和1分别是stdin和stdout的文件描述符,但我只是将()写入int数组的第二个元素并从第一个元素读取(),我是如何得到这个输出的?
提前感谢任何花时间解释此事的人!