Я написал код ниже
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main() {
int fd = 3;
char c[100] = "Testing\n";
ssize_t nbytes = write(fd, (void *) c, strlen(c));
return 0;
}
компилируется/связывается и выполняется
$ ./io
$ ./io 3> io_3.txt
Первая строка не произвела никакого вывода. Вторая строка дала мне файл io_3.txt
, содержащий Testing
. Это все ожидаемое поведение (я думаю).
Даже если в моих тестах это дало ожидаемый результат, я не уверен, что во избежание потенциальных проблем, неопределенного поведения и т. д. я должен делать что-либо до первого write
, например проверять, используется ли fd=3
(и в этом случае , как... valid">это может применяться), если он надлежащим образом открыт и т. д.
И я не уверен, должен ли я выполнить какое-то действие после последнего write
по тем же причинам.
Возможно, то, что я сделал, является «нерискованным», единственная потенциальная проблема заключается в том, что ничего не записывается, что я мог обнаружить, проверив значение nbytes
... Я бы не знал.
Любые разъяснения приветствуются.
open
илиsocket
или любой другой допустимый файловый дескриптор. В этом случае вы зависите от вашего интерпретатора оболочки, который сделает за вас какое-то волшебство перед выполнением программы. Это не портативно. - person Cheatah   schedule 18.05.2020EBADF
. Проверка ошибки (отрицательное возвращаемое значение и errno) выявила бы это. - person PSkocik   schedule 18.05.2020