分页: 1 / 1

[请问]可不可以在C中调用shell命令?

发表于 : 2008-01-03 16:56
xxmv99
如:
在main中能还直接使用pwd???

发表于 : 2008-01-03 17:18
bones7456

代码: 全选

lily@LLY:~/test$ cat fopen.c 
#include<stdio.h>
int main(){
        FILE * fp;
        char str[1024];
        if(NULL==(fp=popen("pwd","r"))){
                return -1;
        }else{
                printf("%s",fgets(str,1023,fp));
        }
        return 0;
}
lily@LLY:~/test$ gcc fopen.c 
lily@LLY:~/test$ ./a.out 
/home/lily/test
lily@LLY:~/test$ 


发表于 : 2008-01-03 18:45
eexpress
system("gimp");
少调用和环境变量有关的命令,那样会无效的。因为gtk等,不太使用这样环境参数了。

发表于 : 2008-01-03 18:56
iblicf
lily@LLY ??????????? 哪个 LL 阿

发表于 : 2008-01-03 23:24
showboy
完全可以,用execvp等这几个相关的命令,不但可以运行,还可以收到shell返回的值,具体请看 unix环境高级编程

发表于 : 2008-01-04 17:33
xxmv99
bones7456 写了:

代码: 全选

lily@LLY:~/test$ cat fopen.c 
#include<stdio.h>
int main(){
        FILE * fp;
        char str[1024];
        if(NULL==(fp=popen("pwd","r"))){
                return -1;
        }else{
                printf("%s",fgets(str,1023,fp));
        }
        return 0;
}
lily@LLY:~/test$ gcc fopen.c 
lily@LLY:~/test$ ./a.out 
/home/lily/test
lily@LLY:~/test$ 

可能是我表达有误,我不是想得到当然目录,我是想使用这个命令.

发表于 : 2008-01-04 17:35
xxmv99
eexpress 写了:system("gimp");
少调用和环境变量有关的命令,那样会无效的。因为gtk等,不太使用这样环境参数了。
这是调用系统命令来运行本地程序吧,长见识了,谢谢~

发表于 : 2008-01-04 17:35
xxmv99
showboy 写了:完全可以,用execvp等这几个相关的命令,不但可以运行,还可以收到shell返回的值,具体请看 unix环境高级编程
execvp???

unix环境高级编程 看不懂,呵.

发表于 : 2008-01-07 13:09
79hy
bones7456 写了:

代码: 全选

lily@LLY:~/test$ cat fopen.c 
#include<stdio.h>
int main(){
        FILE * fp;
        char str[1024];
        if(NULL==(fp=popen("pwd","r"))){
                return -1;
        }else{
                printf("%s",fgets(str,1023,fp));
        }
        return 0;
}
lily@LLY:~/test$ gcc fopen.c 
lily@LLY:~/test$ ./a.out 
/home/lily/test
lily@LLY:~/test$ 

手册说调用popen函数的时候要fflush一下,这里是fflush stdin or stdout???

发表于 : 2008-01-07 13:23
bones7456
xxmv99 写了:
bones7456 写了:

代码: 全选

lily@LLY:~/test$ cat fopen.c 
#include<stdio.h>
int main(){
        FILE * fp;
        char str[1024];
        if(NULL==(fp=popen("pwd","r"))){
                return -1;
        }else{
                printf("%s",fgets(str,1023,fp));
        }
        return 0;
}
lily@LLY:~/test$ gcc fopen.c 
lily@LLY:~/test$ ./a.out 
/home/lily/test
lily@LLY:~/test$ 

可能是我表达有误,我不是想得到当然目录,我是想使用这个命令.
晕,这样就是使用了这个命令啊....

发表于 : 2008-01-07 13:52
eexpress
排骨说高级的。急死人了。呵呵。不知道急了谁。实验了我说的那perl管道调用的没。

发表于 : 2008-01-07 14:06
bones7456
perl 的不会搞呢.