Это не похоже на проблему с fd ... а скорее на ошибку памяти. Обратите внимание, что ваша строка формата не была заменена, но вы получили фактическую строку формата. Тот факт, что ваша запись использует block
, а чтение использует &block
, кажется немного подозрительным, хотя трудно сказать, если это все без контекста. Похоже, вы пишете память из вашей программы, которая, как оказалось, содержит строки вашей программы.
Я предлагаю запустить вашу программу с помощью valgrind.
ОБНОВЛЕНИЕ на основе добавленного кода:
read()
и write()
не работают с "строками", они будут записывать столько байтов, сколько вы просите. Ваш ввод - строковый литерал, и он намного меньше, чем 200 байтов ... Поскольку, скорее всего, все строковые литералы хранятся в одной и той же общей области в вашей программе, поэтому вы видите, что другие появляются в вашем выводе.
Несколько других проблем: ваш выходной буфер недостаточно велик для обработки запрошенного вами read()
, и вы, вероятно, захотите использовать lseek()
между записью и чтением, чтобы иметь возможность прочитать данные снова.