O_NONBLOCK est en cours d'une propriété du descripteur de fichier ou d'un fichier sous-jacent?
-
04-10-2019 - |
Question
D'après ce que je lis sur le site Open Group sur
La solution O_NONBLOCK est une propriété de la description de fichier ouvert, pas du descripteur de fichier, ni du fichier sous-jacent. Oui, vous pourriez avoir des descripteurs de fichiers séparés ouverts pour le même fichier, l'un qui bloque et dont l'autre est non-bloquant. Vous devez faire la distinction entre un FIFO (créé à l'aide Notez que l'état de blocage est une propriété de la « description de fichier ouvert », mais dans les cas les plus simples, il y a une correspondance biunivoque entre les descripteurs de fichiers et les descriptions de fichiers ouverts. L'appel de fonction Lorsque vous utilisez Suppression de l'erreur de manipulation de votre code pour le réduire, vous avez: Maintenant, les deux fd0_dup et fds [0] se référer à la même description de fichier ouvert (à cause du D'où le comportement observé est ici requise par Posix. fcntl
, open
, read
et
mkfifo()
) et un tuyau (créée en utilisant pipe()
). open()
crée une nouvelle description de fichier ouvert et un nouveau descripteur de fichier qui fait référence à la description de fichier ouvert. dup()
, vous avez deux descripteurs de fichiers partageant ouvrir la description de fichier et les propriétés appartiennent à la description de fichier ouvert. La description de fcntl()
dit que F_SETFL affecte la description de fichier ouvert associé à la descripteur de fichier. Notez que lseek()
ajuste la position du fichier de la description de fichier ouvert associé à la descripteur de fichier -. il affecte d'autres descripteurs de fichiers en double de l'original int fds[2];
pipe(fds);
int fd0_dup = dup(fds[0]);
fcntl(fd0_dup, F_SETFL, fcntl(fd0_dup, F_GETFL) | O_NONBLOCK);
dup()
), l'opération de fcntl()
affecté les deux descripteurs de fichiers. if ((fcntl(fds[0], F_GETFL) & O_NONBLOCK)) { ... }