获取控制台输出信息(管道的使用)

大耗子 2020年02月29日 228次浏览

文章链接:https://codemouse.online/archives/2020-02-29-101702

获取控制台输出信息

将管道重定向到标准输入输出中,将输出的字符放到字符串变量中,这样可以传输给别人,改造一下就可以变成一个shell

#include<stdio.h>
#include<sys/types.h>
#include <fcntl.h>
#include<unistd.h>
int main()
{
    char buf[1024];
	int fd[2];
    int backfd;
    pipe(fd);
    backfd=dup(STDOUT_FILENO);//备份标准输出,用于恢复
	fcntl(fd[0],F_SETFL,FNDELAY);
    while(1)
    {
        memset(buf,'\0',sizeof(buf));
		scanf("%s",buf);

		dup2(fd[1],STDOUT_FILENO);  //将标准输出重定向到fd[1]
		system(buf);
		read(fd[0],buf,1024);
		dup2(backfd,STDOUT_FILENO);  //恢复标准输出
        printf("%s\n",buf);
    }
    return 0;
}