2016-04-12 27 views
1

Linux端末の仕組みと同じです。入力と出力のリダイレクト

ls -lのようなコマンドを入力し、コマンドls -l > hello.txtを入力すると、ls -lにあったものがhello.txtに書き込まれます。

私は自分の端末を作っていますが、ユーザーが同じコマンドを入力したときにそのようにするようにしていますls -l > asdf.txtユーザが入力したテキストファイルにls -lを書き出すようにしました。

これは私が持っているものです。私のミニターミナルシェルはすでに動作しています。どのように私は、テキストファイルに0番目の引数には何でも出力に行くだろう

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

?だから、w > hello.txthello.txtに出力されますか?あなたは次の操作を行うことができ、あなたの引数(引数)で正しいと仮定すると、

+0

可能な複製(http://stackoverflow.com/questions/2008267/how-to-write-a-file-with- [LinuxでのCを持つファイルを作成する方法?] c-in-linux) –

+0

実際にはコマンド "ls -l"の出力を – Pooya

+0

@Pooya Yeahに出力します。それが私の言うことです。 – JJang

答えて

1

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

あなたはpopenのをチェックアウトすることができ、あなたはlsコマンドを実行する方法に依存し、それがコマンドを実行し、その後、コマンドの出力を読むことができる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); 
関連する問題