我目前正在努力解決這個錯誤。我正在編寫一個shell模擬器,使用fork()來執行使用execvp();的命令。 幾乎每個我試圖解析到shell的命令都能正常工作,除了ls沒有參數。 如果我嘗試執行LS -lah,一切正常,但一個簡單的LS不會,收到以下錯誤:execvp - ls:fts_open:沒有這樣的文件或目錄
ls: fts_open: No such file or directory
這裏是我的代碼片段:(只是必需的)
pid = fork();
if (pid==0)
{
puts("CHILD");
puts(args[0]);
puts(args[1]);
printf("%d\n", strlen(args[1]));
args[2] = NULL;
execvp(args[0], args);
}
else wait(NULL);
puts("BACK TO PARENT");
}
和這裏爲LS的輸出:
ls
CHILD
ls
0
ls: fts_open: No such file or directory
BACK TO PARENT
,你可以看到,ARGS [0]包含LS,ARGS [1]是空的,因爲沒有參數,args來長度[1]是0,但我不斷收到錯誤。
想法是什麼?
編輯:
榮譽喬納森萊弗勒尋找出來:(也,現在看來似乎只是在Mac上的問題)
的一點是ARGS [1]是不是真的空,因此,操作系統會嘗試打開''文件,顯然,該文件不存在,並且根據外觀,無法創建,因爲它不是真正的名稱。
所以,這是我做的:檢查args的len [1]。如果它是0,則將其設置爲NULL。 (只是釋放內存並沒有真正幫助)
pid = fork();
if (pid==0)
{
puts("CHILD");
puts(args[0]);
puts(args[1]);
if (strlen(args[1]) == 0)
args[1] = 0;
args[2] = NULL;
execvp(args[0], args);
}
else wait(NULL);
puts("BACK TO PARENT");
}
可以顯示'args'的完整定義(什麼'args [1]'設置爲,什麼是「空」?)以及更多的代碼? – 2013-04-09 03:39:50