项目需求,需要在C++代码中实现shell命令,上网查了下,找到了system()和popen()两个函数可以实现。这两个函数都调用fork()产生子进程,system通过子进程调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程;popen通过子进程执行一个 shell 以运行命令来开启一个进程,这个进程必须由 pclose() 函数关闭。(popen和pclose要成对使用

返回值的问题

system(const char* string):

  如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno来确认执行成功。

popen(const char* command,const char* type):

  如果调用 fork()或pipe()失败,或者不能分配内存将返回NULL,成功返回标准 I/O流(从流中读数据相当于读取命令的标准输出)。popen 没有为内存分配失败设置 errno 值。如果调用 fork() 或 pipe() 时出现错误,errno 被设为相应的错误类型。如果 type 参数不合法,errno将返回EINVAL。

 

   

posted on 2014-04-25 09:50  江左醉风流  阅读(1542)  评论(0编辑  收藏  举报