[英]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.