cygwin下遇到system没有执行的问题
RT!
在cygwin下做移植,从linux移植到windows下。在程序中用到系统函数system(),在cygwin平台下运行程序,这个system函数能成功执行,但是从windows平台下运行的话,就不行啦!为什么呀??
eg:
#include <stdio.h>
int main(void)
{
printf("=========\n");
system("ls");
printf("=========\n");
return 0;
}
在从cygwin软件的界面运行,就可以成功显示路径下的文件。但是换个环境(程序连带cygwin1.dll一起打包换到其他电脑下),其他的代码都能执行,就这个sysytem函数没有调用!!
PS:可能会有人说在xp的path中添加cygwin/bin,但是这样子还是和cygwin环境有关系啦,而且不能保证每个使用我程序的用户以前都安装过cygwin。我是要换个环境的情况下还能够使用。
[解决办法]
lz你没了解system的作用
它本质上就是起调用函数的作用
如果没有ls命令,当然运行不成功了
[解决办法]
根据Linux手册man system的结果,system依赖于命令行解释器(Linux的bash,Windows的cmd)来处理输入的命令,而这些是OS相关的。
我的想法是直接使用fork配合exec族函数来做,对于外部命令应该可以完成,你试一试。对于内部命令需要一些丑陋的技巧,我现在也没有找到优雅的方法,所以暂时不写了。
这是我的测试代码,仅供参考:
#include <stdio.h>#include <unistd.h>void test(){ pid_t pid; printf("Start ping\n"); pid = fork(); if (pid < 0) { exit(1); } else if (pid == 0) { execle("/cygdrive/c/WINDOWS/system32/ping6", "ping6", "::1", (char *)0, NULL); } if (waitpid(pid, NULL, 0) < 0) exit(1); printf("End ping\n");}int main(int argc, char **argv){ test(); return 0;}