所以,就像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
?
答案 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);