簡體   English   中英

叉子和煙斗問題-無限印刷

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM