2016-04-12 5 views
1

Итак, как работает терминал 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

Возможный дубликат [Как записать файл с C в Linux] (http://stackoverflow.com/questions/2008267/how-to-write-a-file-with- 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

Зависит от того, как выполнить команду 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); 
Смежные вопросы