一个问题,linux下的C编程,菜鸟求助

软件和网站开发以及相关技术探讨
回复
yatong2008
帖子: 5
注册时间: 2011-07-09 11:45

一个问题,linux下的C编程,菜鸟求助

#1

帖子 yatong2008 » 2011-10-06 16:08

C语言里面一个语句,怎么样在terminal里面执行,并且打印出来结果?
举个例子,比如 char a[1024]; strcpy(a, "ls -l | sort");
我现在像执行a这个语句,并且打印出结果,在terminal里面,求助高手……
头像
懒蜗牛Gentoo
论坛版主
帖子: 7362
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: 一个问题,linux下的C编程,菜鸟求助

#2

帖子 懒蜗牛Gentoo » 2011-10-06 16:10

用system();系统调用
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
yatong2008
帖子: 5
注册时间: 2011-07-09 11:45

Re: 一个问题,linux下的C编程,菜鸟求助

#3

帖子 yatong2008 » 2011-10-06 16:12

# 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了,想要执行宾且打印出来结果,求助高手怎么样修改?
5yan
帖子: 134
注册时间: 2007-04-24 17:24
来自: Pluto
联系:

Re: 一个问题,linux下的C编程,菜鸟求助

#4

帖子 5yan » 2011-10-06 16:33

这个人很懒.什么都没留下
qimingos
帖子: 226
注册时间: 2007-06-23 14:26
联系:

Re: 一个问题,linux下的C编程,菜鸟求助

#5

帖子 qimingos » 2011-10-07 9:40

代码: 全选

#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);
}
运行结果:
1.png
我一直在努力!

我的博客:xxNull
回复