As constantes fcntl no Ubuntu são diferentes de outros sistemas operacionais?

1

Eu encontrei o problema com minha implementação fcntl em js-ctypes. Eu estava usando os valores constantes incorretos.

  • Todos eu pareço que eles o tenham diferente, por exemplo:

Esses caras estão recebendo 1 2 3 para rdlck , wrlck e unlck .

  • No entanto, quando eu corro este código C para descobrir os constnats no Ubuntu ele está me dizendo que eles são 0, 1 e 2:
por Noitidart 24.09.2014 / 08:41

2 respostas

2

Eu diria que esses valores constantes são específicos do Linux, não específicos do Ubuntu.

No seu arquivo C, você recebe fcntl.h de /usr/include/fcntl.h , que contém:

/* Get the definitions of O_*, F_*, FD_*: all the
   numbers and flag bits for 'open', 'fcntl', et al.  */
#include <bits/fcntl.h>

Em /usr/include/<your_arch>/bits/fcntl.h você pode ver o seguinte código:

/* Include generic Linux declarations.  */
#include <bits/fcntl-linux.h>

Finalmente, esse arquivo /usr/include/<your_arch>/bits/fcntl-linux.h define esses valores da seguinte forma:

#ifndef F_RDLCK
/* For posix fcntl() and 'l_type' field of a 'struct flock' for lockf().  */
# define F_RDLCK        0   /* Read lock.  */
# define F_WRLCK        1   /* Write lock.  */
# define F_UNLCK        2   /* Remove lock.  */
#endif

Para confirmar que não é específico do Ubuntu, você pode verificar as definições no fonte libc , eles são iguais.

    
por Sylvain Pineau 24.09.2014 / 10:20
1

O valor de tais constantes é sempre implementado, a menos que os padrões especifiquem o valor. Se você usar os valores diretamente em vez dos nomes, isso simplesmente causará problemas. Nada no manpage de fcntl menciona os valores, portanto, não assuma nada.

    
por muru 24.09.2014 / 10:19