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

软件和网站开发以及相关技术探讨
回复
xxmv99
帖子: 166
注册时间: 2007-12-26 11:02

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

#1

帖子 xxmv99 » 2008-01-03 16:56

如:
在main中能还直接使用pwd???
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#2

帖子 bones7456 » 2008-01-03 17:18

代码: 全选

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$ 

关注我的blog: ε==3
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#3

帖子 eexpress » 2008-01-03 18:45

system("gimp");
少调用和环境变量有关的命令,那样会无效的。因为gtk等,不太使用这样环境参数了。
● 鸣学
头像
iblicf
帖子: 3766
注册时间: 2007-01-15 17:15

#4

帖子 iblicf » 2008-01-03 18:56

lily@LLY ??????????? 哪个 LL 阿
showboy
帖子: 122
注册时间: 2006-11-26 14:41

#5

帖子 showboy » 2008-01-03 23:24

完全可以,用execvp等这几个相关的命令,不但可以运行,还可以收到shell返回的值,具体请看 unix环境高级编程
xxmv99
帖子: 166
注册时间: 2007-12-26 11:02

#6

帖子 xxmv99 » 2008-01-04 17:33

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$ 

可能是我表达有误,我不是想得到当然目录,我是想使用这个命令.
xxmv99
帖子: 166
注册时间: 2007-12-26 11:02

#7

帖子 xxmv99 » 2008-01-04 17:35

eexpress 写了:system("gimp");
少调用和环境变量有关的命令,那样会无效的。因为gtk等,不太使用这样环境参数了。
这是调用系统命令来运行本地程序吧,长见识了,谢谢~
xxmv99
帖子: 166
注册时间: 2007-12-26 11:02

#8

帖子 xxmv99 » 2008-01-04 17:35

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

unix环境高级编程 看不懂,呵.
头像
79hy
帖子: 80
注册时间: 2007-10-24 10:21
来自: 长沙

#9

帖子 79hy » 2008-01-07 13:09

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???
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#10

帖子 bones7456 » 2008-01-07 13:23

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$ 

可能是我表达有误,我不是想得到当然目录,我是想使用这个命令.
晕,这样就是使用了这个命令啊....
关注我的blog: ε==3
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#11

帖子 eexpress » 2008-01-07 13:52

排骨说高级的。急死人了。呵呵。不知道急了谁。实验了我说的那perl管道调用的没。
● 鸣学
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#12

帖子 bones7456 » 2008-01-07 14:06

perl 的不会搞呢.
关注我的blog: ε==3
回复