Как сделать блокировку файлового дескриптора? - PullRequest
10 голосов
/ 27 мая 2009

Учитывая произвольный файловый дескриптор, могу ли я сделать его блокирующим, если он неблокирующий? Если да, то как?

Ответы [ 2 ]

14 голосов
/ 27 мая 2009

Прошло много времени с тех пор, как я играл с C, но вы можете использовать функцию fcntl () , чтобы изменить флаги дескриптора файла:

#include <unistd.h>
#include <fcntl.h>

// Save the existing flags

saved_flags = fcntl(fd, F_GETFL);

// Set the new flags with O_NONBLOCK masked out

fcntl(fd, F_SETFL, saved_flags & ~O_NONBLOCK);
8 голосов
/ 27 мая 2009

Я ожидаю, что просто не установив флаг O_NONBLOCK, вы вернете дескриптор файла в режим по умолчанию, который блокирует:

/* Makes the given file descriptor non-blocking.
 * Returns 1 on success, 0 on failure.
*/
int make_blocking(int fd)
{
  int flags;

  flags = fcntl(fd, F_GETFL, 0);
  if(flags == -1) /* Failed? */
   return 0;
  /* Clear the blocking flag. */
  flags &= ~O_NONBLOCK;
  return fcntl(fd, F_SETFL, flags) != -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...