2013-04-10 2 views
0

Я пытаюсь написать программу, которая позволяет мне набирать что-то вроде этого в командной строке:Открытие файла через трубу

cat inputfile | myprogram outputfile 

В MyProgram мне нужно открыть как входной и выходной файл без входной файл является параметром. Я знаю, как открыть выходной файл и установить его в дескрипторе:

int out=open(argv[1],O_RDONLY); 

Но я не знаю, как сделать это с помощью входного файла. Я знаю, что вывод cat отправляется в cin моей программы, но я не хочу читать файл в строковой последовательности. Возможно ли это сделать так же, как открытие выходного файла? Как так:

int in=open(?????,O_RDONLY); 
+0

'станд :: cin' это просто еще один' станд :: istream' - в то время как линия за линией обработки является обычным явлением, это не обязательно. Вы можете прочитать символ за раз или использовать блок-чтение для обработки больших кусков за раз. –

+0

Я знаю об этом, но есть ли способ заставить их перестать читать, как только текст не останется читаемым? Они заставляют меня указывать длину для чтения и заканчивать добавление данных мусора в конец. Как это сделать правильно? – user1804208

+0

Они не добавляют никакого мусора в конец - они просто читаются до конца и не перезаписывают ничего после этого. Вы можете заранее инициализировать буфер (например, для всех 0), или вы можете использовать 'gcount', чтобы узнать, сколько данных вы получили в последнем чтении. –

ответ

0

В C может быть решена как

#include<stdio.h> 
#include <unistd.h> 
#include <fcntl.h> 

int main(int argc, char **argv) 
{ 
     int flags=fcntl(0,F_GETFL); 
     fcntl(0,F_SETFL,flags|O_NONBLOCK); 
     char ch; 
     while(read(0,&ch,1)) 
     { 
       printf("%c",ch); 
     } 
}