首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

cygwin下遇到system没有执行的有关问题

2012-04-05 
cygwin下遇到system没有执行的问题RT!在cygwin下做移植,从linux移植到windows下。在程序中用到系统函数syst

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族函数来做,对于外部命令应该可以完成,你试一试。对于内部命令需要一些丑陋的技巧,我现在也没有找到优雅的方法,所以暂时不写了。

这是我的测试代码,仅供参考:

C/C++ code
#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;} 

热点排行
Bad Request.