C语言里面一个语句,怎么样在terminal里面执行,并且打印出来结果?
举个例子,比如 char a[1024]; strcpy(a, "ls -l | sort");
我现在像执行a这个语句,并且打印出结果,在terminal里面,求助高手……
一个问题,linux下的C编程,菜鸟求助
-
- 帖子: 5
- 注册时间: 2011-07-09 11:45
- 懒蜗牛Gentoo
- 论坛版主
- 帖子: 7362
- 注册时间: 2007-03-02 17:36
- 系统: Linux Mint
Re: 一个问题,linux下的C编程,菜鸟求助
用system();系统调用
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
10.04新手入门——笨兔兔讲述自己的故事
-
- 帖子: 5
- 注册时间: 2011-07-09 11:45
Re: 一个问题,linux下的C编程,菜鸟求助
# include <stdio.h>
#include <unistd.h>
#define BUFFERSIZE 4096
int main(int ac, char** av){
if(ac <= 1)
printf("no args\n");
else{
int i;
char buffer[BUFFERSIZE];
char space[1] = " ";
strcpy(buffer, av[1]);
if(ac >= 2){
for(i = 2; i < ac; i++){
sprintf(buffer, "%s | %s", buffer, av);
//strcat(buffer, space);
//strcat(buffer, av);
}
}
//printf("%s\n", buffer);
char *a = buffer;
execlp(a,a,NULL);
}
return 0;
}
我贴代码了,是这样的一个程序,效果是执行后比如, ./exe who sort head,
需要变成who | sort | head的效果,我现在把argv已经打印成了string了,想要执行宾且打印出来结果,求助高手怎么样修改?
#include <unistd.h>
#define BUFFERSIZE 4096
int main(int ac, char** av){
if(ac <= 1)
printf("no args\n");
else{
int i;
char buffer[BUFFERSIZE];
char space[1] = " ";
strcpy(buffer, av[1]);
if(ac >= 2){
for(i = 2; i < ac; i++){
sprintf(buffer, "%s | %s", buffer, av);
//strcat(buffer, space);
//strcat(buffer, av);
}
}
//printf("%s\n", buffer);
char *a = buffer;
execlp(a,a,NULL);
}
return 0;
}
我贴代码了,是这样的一个程序,效果是执行后比如, ./exe who sort head,
需要变成who | sort | head的效果,我现在把argv已经打印成了string了,想要执行宾且打印出来结果,求助高手怎么样修改?
-
- 帖子: 134
- 注册时间: 2007-04-24 17:24
- 来自: Pluto
- 联系:
-
- 帖子: 226
- 注册时间: 2007-06-23 14:26
- 联系:
Re: 一个问题,linux下的C编程,菜鸟求助
代码: 全选
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define BUFFERSIZE 4096
int myexec(char* cmd){
char c;
int pfds[2];
if(pipe(pfds))return -1;
if (fork() == 0){
close(fileno(stdout));
dup2( pfds[1], fileno(stdout) );
close( pfds[0] );
return system(cmd);
}
close(pfds[1]);
while(read(pfds[0],&c,1)==1)putchar(c);
close(pfds[0]);
return 0;
}
int main(int ac, char** av){
int i;
char buffer[BUFFERSIZE];
if(ac <= 1){
printf("no args\n");
return 1;
}
strncpy(buffer, av[1], sizeof(buffer));
for(i = 2; i < ac; i++){
sprintf(buffer, "%s %s", buffer, av[i]);
}
return myexec(buffer);
}