输入和输出重定向

时间:2016-04-12 04:25:25

标签: c linux

所以,就像Linux终端的工作方式一样。

如果我执行ls -l之类的操作并输入命令ls -l > hello.txt,则会将ls -l中的任何内容写入hello.txt

我正在创建一个自己的终端,而我正在尝试制作它,以便当用户输入相同的命令ls -l > asdf.txt时,它会将ls -l写入任何文本文件用户输入。

所以这就是我所拥有的。我的迷你终端外壳已经可以使用了。

FILE *fp
if (strcmp(args[1], ">") == 0) {
    fp = freopen(args[2], "w+", stdout);
}
fclose(fp);

如何将第0个参数中的任何内容输出到文本文件中?那么,w > hello.txt会输出到hello.txt

2 个答案:

答案 0 :(得分:1)

假设您的参数(args)正确,您可以执行以下操作:

char buffer [1024];
FILE *fp
if (strcmp(args[1], ">") == 0) {
    fp = freopen(args[2], "w+", stdout);
} else {return; }

FILE *cmd;
cmd = popen(args[0],"r");
if(cmd == NULL)
  return;

while (fgets(buffer,sizeof(buffer)-1,cmd)!=NULL)
{
   fprintf(fp,"%s",buffer);
}

fclose(fp);
pclose(cmd);

答案 1 :(得分:1)

取决于你如何执行ls命令,你可以检查popen,它将运行命令,然后返回一个FILE,你可以从中读取命令的输出,然后你可以将输出写入用于重定向的文件。 例如:

FILE *fin = popen("/bin/ls -l", "r");
if (!fp) { ... //handle error }
FILE *fout = freopen(args[2], "w", stdout);
char c;
while ((c = fgetc(fin)) != EOF) {
    fputc(c, fout);
}
pclose(fin);
fclose(fout);