文章链接: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;
}