Когда я сделал приведенный выше код, я не пишу в файл с именем filename
.
Конечно, нет.Когда вы вызываете dup2(open_fd,fd[0])
, вы делаете целочисленное значение, хранящееся в fd[0]
, ссылающимся на тот же файл, что и open_fd
, но это не имеет прямого отношения к тому, что происходит с байтами, переданными в конец записи канала,Он влияет на них только косвенно, заставляя номер файлового дескриптора, значение которого изначально было сохранено в fd[0]
, сначала закрываться, если он открыт.
Дескриптор файла - это, по сути, ключ к открытию целых чисел таблицыописания файлов в ядре.dup2()
изменяет, к какому открытому описанию файла привязан целевой FD;он не изменяет само описание открытого файла и не влияет на его семантику, и на уровне , на котором живет канал, .
Байт, записанный в конец записи канала, получается из чтенияконец трубы, читая его.Тем не менее, вы делаете это, они изначально находятся в памяти и / или в регистрах процессора.Чтобы заставить их перейти оттуда к файлу, вам нужно отправить туда их.Например, вы можете настроить поток, целью которого является чтение любых доступных байтов из канала, а затем запись их в ваш файл.