Как закрыть ручку трубы в Unix? (fclose () из pclose ())?

0

Если я создаю канал в unix следующим образом:

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

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

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

Затем как закрыть этот файл (pipe_read)?

  • fclose(pipe_read)
  • pclose(pipe_read)
  • close(fileno(pipe_read))
  • 0
    в следующий раз: man popen дает вам информацию в строке 3
Теги:
file
pipe
posix

2 ответа

4
Лучший ответ

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

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

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

1

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню