Как закрыть ручку трубы в Unix?(fclose () из pclose ())? - PullRequest
0 голосов
/ 05 апреля 2011

Если я создаю трубу в Unix следующим образом:

int fds[] = {0, 0};
pipe(fds);

Затем создайте FILE * из fds[0] таким образом:

FILE *pipe_read = fdopen(fds[0], "rt");

Тогда как мне закрыть этот файл (pipe_read)?

  1. fclose(pipe_read)
  2. pclose(pipe_read)
  3. close(fileno(pipe_read))

Ответы [ 2 ]

4 голосов
/ 05 апреля 2011

fdopen возвращает FILE*, поэтому вы должны fclose. Это также закроет основной файловый дескриптор.

Вызов pclose предназначен для закрытия дескриптора, созданного с помощью popen, функции, которую вы используете для запуска команды и подключения к ней с помощью каналов.

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

1 голос
/ 05 апреля 2011

Вы должны использовать fclose (pipe_read).

close () закрывает файловый дескриптор в ядре. Это недостаточно, потому что указатель файла не является бесплатным. Поэтому вы должны использовать fclose () для pipe_read, которая также позаботится о закрытии файлового дескриптора.

...