2012-03-21 117 views
0

這裏我在linux下的代碼中使用。 在系統函數中使用cp命令。什麼系統函數和cp命令在C/Linux中返回

我知道系統函數它會返回0 if命令成功執行,否則它會返回錯誤代碼。

如果這裏我用正確的源和目標路徑比我得到的輸出喜歡這個

Number == 0 

如果我給錯了源和目標路徑比我得到

cp: cannot create regular file `/home/sam/test/test': No such file or directory 
Number == 256 

cp: cannot stat `/home/sam/main/test2/test': Not a directory 
Number == 256 

在這裏,我想知道錯誤代碼cp命令什麼cp命令在這裏返回。

我的問題是這裏

1 System function return error code of cp command? 
2 Can i get error code of cp command from source code of cp command? 
3 i want to handle all types of error in this cp command. 

代碼:

#include <stdlib.h> 
#include <stdio.h> 

void main() 
{ 
    int a; 
    a = system("cp /home/sam/main/test /home/sam"); 
    printf("Number == %d\n",a); 
} 

所以,任何機構,請給我解釋一下這一切

+1

請停止使用無效的主要()。 main()函數應該返回int。 (如果cp或sh的創建者會使用'void main()',會發生什麼?) – wildplasser 2012-03-21 11:19:30

+0

爲什麼不使用mmap()或open()/ read()/ write()來複制文件而不是使用系統()執行cp命令? – dAm2K 2012-03-21 13:10:17

回答

4

的正確方法用戶系統的返回值與wait-specific macros

if (WIFEXITED(a)) { 
    int rc; 
    rc = WEXITSTATUS(a); 
    printf("Exit with status: %d\n", rc); 
} else { 
    /* Killed by a signal. */ 
} 
+0

當cp命令失敗並且它給出256時,我的輸出如何?它的cp命令的狀態或系統funtcion的錯誤代碼? – user1089679 2012-03-21 11:16:28

+0

@ user1089679沒什麼。這是一個沒有我給你展示的宏的毫無意義的小整數。 – cnicutar 2012-03-21 11:17:33

1

狀態system的人頁:

返回值 返回的值是1的錯誤(例如,叉(2)失敗),以及以其他方式命令的返回狀態。後者返回 狀態的格式爲wait(2)中指定的格式。因此,該命令的退出代碼將爲WEXITSTATUS(狀態)。如果 /bin/sh無法執行,則退出狀態將爲退出命令的狀態(127)。

如果命令的值爲NULL,則如果shell可用則system()返回非零值,否則返回零。系統()不影響任何其他子項的等待狀態。

所以,你可以退出狀態與WEXITSTATUS(a) whene WIFEXITED(a)是真實的。

通常,在聯機幫助頁中指定了可能的命令退出代碼。對於cp,沒有文檔,所以你不能依賴任何東西。您可能會考慮使用較低級別的系統命令(如openlink)。

+0

在我的輸出256中怎麼樣? – user1089679 2012-03-21 11:15:47

1

256通常意味着有一個權限問題

+0

歡迎來到Stack Overflow!這並不能解答這個問題。要批評或要求作者澄清,在他們的帖子下留下評論 - 你可以隨時評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/faq#reputation),你將能夠[評論任何帖子](http://stackoverflow.com/privileges/comment)。 – 2013-04-02 10:37:51