Я пытаюсь написать программу, которая позволяет мне набирать что-то вроде этого в командной строке:Открытие файла через трубу
cat inputfile | myprogram outputfile
В MyProgram мне нужно открыть как входной и выходной файл без входной файл является параметром. Я знаю, как открыть выходной файл и установить его в дескрипторе:
int out=open(argv[1],O_RDONLY);
Но я не знаю, как сделать это с помощью входного файла. Я знаю, что вывод cat отправляется в cin моей программы, но я не хочу читать файл в строковой последовательности. Возможно ли это сделать так же, как открытие выходного файла? Как так:
int in=open(?????,O_RDONLY);
'станд :: cin' это просто еще один' станд :: istream' - в то время как линия за линией обработки является обычным явлением, это не обязательно. Вы можете прочитать символ за раз или использовать блок-чтение для обработки больших кусков за раз. –
Я знаю об этом, но есть ли способ заставить их перестать читать, как только текст не останется читаемым? Они заставляют меня указывать длину для чтения и заканчивать добавление данных мусора в конец. Как это сделать правильно? – user1804208
Они не добавляют никакого мусора в конец - они просто читаются до конца и не перезаписывают ничего после этого. Вы можете заранее инициализировать буфер (например, для всех 0), или вы можете использовать 'gcount', чтобы узнать, сколько данных вы получили в последнем чтении. –