2013-08-07 101 views
0

我想通過unix機器上的套接字運行一個最小的終端shell程序。當我使用system("cd directory")時,它不起作用。所以我做了一些研究,碰到chdir(),看起來好像會起作用。但是,當我嘗試它時,它每次都會給我帶來錯誤。這是我的代碼:在C++中的chdir()獲取錯誤

if (chdir(argument) < 0) { 
    send(sock, "[*] Directory does not exits!\n", strlen("[*] Directory does not exits!\n"), 0); 
} 
else { 
    string argumentString(argument); 
    string entireMessage = "[*] New working directory: " + argumentString; 
    char entireMessageChar[64]; 
    int i; 
    for (i = 0; entireMessage[i] != '\0'; i++) { 
     entireMessageChar[i] = entireMessage[i]; 
    } 
    send(sock, &entireMessage, strlen(entireMessageChar), 0); 
} 

請問誰能告訴我爲什麼chdir()不改變目錄? 謝謝。

+0

不知道_exactly_是什麼'chdir()'的返回碼是不可能的。在檢查它是否爲非零值之後,您不能將其丟棄,因此此時此問題沒有包含足夠的信息來提供有用的答案。 –

+0

好的,等我拿到代碼。 – jamespick

+5

順便說一句 - system(「cd directory」)不起作用的原因是'system()'啓動了一個shell;外殼變成新的目錄,然後外殼退出。你開始一個改變其目錄的子進程並不意味着你的目錄改變了。 –

回答

2

chdir()退出後errno的值需要檢查以確定其無效。

可能的退出狀態值包括:

  • EACCESS(目標沒有權限)
  • ENOENT(文件不存在)
  • ENOTDIR(目標是一個文件,不是一個目錄)。

查看完整列表的操作系統實施文檔。

+2

假設符合POSIX的'chdir',它在成功時返回0,在失敗時返回-1。如果失敗,它會將'errno'設置爲其中的一個值。在通話之前,你應該把'errno'設置爲0。 –

+0

@凱特湯普森相當正確。這就是我在其他地方嘗試回答C問題十年後所得到的結果...... –

+0

對不起,如果我通過我的評論混淆了任何人。 Errno返回2 – jamespick