我得到了一些奇怪的输出:
Read 0 bytes: P
?\?
来自我的代码:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
char phrase[0] = "stuff this in your pipe and smoke it";
int main(int argc, char* argv[]) {
int fd[2], bytesRead;
char message[100];
int pid;
pid = fork();
pipe(fd);
if (pid == 0) {
close(fd[0]);
write(fd[1], phrase, strlen(phrase) + 1);
close(fd[1]);
}else {
close(fd[1]);
bytesRead = read(fd[0], message, 100);
printf("Read %d bytes: %s\n", bytesRead, message);
close(fd[0]);
}
}
我不知道我哪里出错了,不知道吗?
答案 0 :(得分:2)
pid = fork(); pipe(fd);
当子进程从父进程继承描述符时,此示例有效。您需要在pipe
之前致电fork
。
答案 1 :(得分:2)
@cnicutar已经回答了一个问题。另一个问题是:
char phrase[0] = "stuff this in your pipe and smoke it";
声明一个0长度的数组,并且存储的字符串要长得多。
将其更改为:
char phrase[] = "stuff this in your pipe and smoke it";
C标准规定数组的大小应大于零。
来自C99,6.7.5.2:
如果它们分隔表达式(指定数组的大小), 表达式应具有整数类型。如果表达式是 常量表达式,它的值应大于零。