[英]Fork and Pipe problem - unlimited printing
在int main()中启动此代码后:
int p[2];
char *argv[2];
argv[0] = "wc";
argv[1] = "0";
pipe(p);
if(fork() == 0) {
close(0);
dup(p[0]);
close(p[0]);
close(p[1]);
execv("/bin/wc", argv);
} else {
close(p[0]);
write(p[1], "pls work finally jesus\n", 12);
close(p[1]);
}
我最终在终端中不断打印无限的“>>>>>>>>>>>>(...)”。 我该如何解决?
根据POSIX execv()
文档 (正在开发中):
int execv(const char *path, char *const argv[]);
...
参数
argv
是指向空终止字符串的字符指针数组。 应用程序应确保此数组的最后一个成员为空指针。 ...
这不满足那些条件:
char *argv[2];
argv[0] = "wc";
argv[1] = "0";
"0"
不是“空指针”。 您正在将包含字符串"0"
的字符串文字的地址分配给argv[1]
。 由于数组的最后一个成员不是“空指针”,因此您正在调用未定义的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.