2012-03-21 119 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