2014-01-24 167 views
0

我正在做一個系統調用來更改C++程序中的當前目錄,由於某種原因,第一次調用返回PERROR IN ELSE時成功,第二次返回非法查找PERROR IN ELSE(使用相同的命令和兩者調用函數將直接指向else子句)。任何想法爲什麼?謝謝。我感謝你們的幫助!調用perror()第一次成功,第二次返回ILLEGAL SEEK?

void changedir(cmd_t& command, int numArg) 
{ 
    char buffer[MAXCHAR]; 
    if (numArg == 1){ 
    chdir(getenv("HOME")); 
    perror("chdir"); 
    getcwd(buffer, MAXCHAR); 
    cout << buffer << endl; 

    } else { 
    chdir(command.argv[1]); 
    perror("chdir"); 
    getcwd(buffer, MAXCHAR); 
    cout << buffer << endl; 

    } 
} 
+0

我不明白。 「這兩個命令都在其他語句中。」'else'中只有一個'perror'。你如何調用這個程序?你可以提交一個測試用例嗎? 「第一」和「第二」是什麼意思? –

+0

對不起,我的不好解釋。如果沒有發生錯誤,我就知道我不應該打電話給你。 –

回答

4

如果沒有發生錯誤,請不要撥打perror。它會給你無意義的輸出。

通常,系統/庫調用後errno的值是未定義的,除非該調用將其設置爲特定值。這通常只發生在調用失敗並且函數通過其返回值發出信號時。

在您的具體情況下,請勿撥打perror,除非chdir返回-1。如果你給它一個NULL指針

在Linux上,chdir將引發EFAULT錯誤,但不是在POSIX規定(chdir),所以更優質的通話chdir(同樣的事情你command.argv[i]如果可以在退房前的getenv結果可能返回一個空指針)。

+0

完美。正是我所需要的。謝謝! –

+0

@LeonardLie接受答案,然後 – zoska

+0

是的,我打算去,但需要6分鐘才能接受。 –

相關問題