Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
Ver: Modo: Orden:
Portabilidad de python | 8 comentarios (8 temáticos, editoriales, 0 ocultos)
Sí que puede ser (none / 0) (#5)
por Draco a las Tue Feb 8th, 2005 at 05:22:46 PM CET
(Información Usuario)

que el software sólo se pruebe en linux. De hecho lo de que fcntl no funcione sobre NFS y flock no, yo no lo veo como algo universal. El mecanismo de implementación de fcntl, flock y lockf según el McKusick es el mismo(en FreeBSD, claro) y por tanto compatible.

Lo que no veo tan claro es que este caso funcione en Linux. En Python se definen estos valores:
#ifndef LOCK_SH
#define LOCK_SH		1	/* shared lock */
#define LOCK_EX		2	/* exclusive lock */
#define LOCK_NB		4	/* don't block when locking */
#define LOCK_UN		8	/* unlock */
#endif  /* LOCK_SH */


Sin embargo en el kernel(descartando que la glibc haga algún tipo de magia negra con la llamada a fcntl), las constantes que tienen esos valores son:

#define F_GETFD         1       /* get close_on_exec */
#define F_SETFD         2       /* set/clear close_on_exec */
#define F_GETFL         3       /* get file->f_flags */
#define F_SETFL         4       /* set file->f_flags */
#define F_GETLK         5
#define F_SETLK         6
#define F_SETLKW        7
 
#define F_SETOWN        8       /*  for sockets. */



De ahí que piense que en realidad esa llamada no está haciendo nada. No lo digo con seguridad porque no tampoco estoy demasiado puesto....

Las constantes linux-specific que dices tú parece que empiezan en 1024.
There are two major products to come out of Berkeley: LSD & BSD Unix. I don't believe this to be a coincidence.
[ Padre ]


Pregunta estúpida (none / 0) (#6)
por jorginius ("jorginius" en Google Mail) a las Fri Feb 11th, 2005 at 03:13:04 AM CET
(Información Usuario) http://www.rodriguezmoreno.com

¿Por qué no miráis cómo hace realmente la llamada al sistema que falla con strace?. Así salís de dudas:
strace -e trace=flock,fcntl -o log python ...
Hay port de strace en FreeBSD, ¿no?.

[ Padre ]


Estúpidos nosotros (none / 0) (#7)
por Draco a las Fri Feb 11th, 2005 at 09:56:48 AM CET
(Información Usuario)

El equivalente de strace en FreeBSD es truss. Yo no tengo un FreeBSD a mano desde hace algún tiempo, pero sí puedo probar que en Linux no está haciendo lo que se espera.

El resultado es éste:
fcntl64(5, F_SETFD, FD_CLOEXEC)         = 0
fcntl64(3, F_GETFD)                     = 0
fcntl64(3, F_SETOWN, 0)                 = 0


El primer fcntl es del propio python y el segundo y el tercero son de un
fd = f.fileno()
fcntl.fcntl(fd, fcntl.LOCK_SH)
fcntl.fcntl(fd, fcntl.LOCK_UN)

There are two major products to come out of Berkeley: LSD & BSD Unix. I don't believe this to be a coincidence.
[ Padre ]


 
Diferencias (none / 0) (#8)
por ridiculum a las Sat Feb 12th, 2005 at 09:03:40 PM CET
(Información Usuario)

#!/usr/bin/env python

import fcntl

filename="TODO"

file = open(filename, "rb")
fd = file.fileno()
fcntl.fcntl(fd, fcntl.LOCK_SH)
fcntl.fcntl(fd, fcntl.LOCK_EX)
fcntl.fcntl(fd, fcntl.LOCK_UN)

fcntl.flock(fd, fcntl.LOCK_EX)
fcntl.flock(fd, fcntl.LOCK_UN)
Con ese ejemplo, tenemos en Linux lo que ya ha comentado Draco en el otro post:
  • LOCK_SH -> F_GETFD
  • LOCK_UN -> F_SETOWN, 0
  • LOCK_ES -> F_SETFD, 0
En el caso de FreeBSD, tenemos (hecho con un strace -f test.py):
  • LOCK_SH -> F_GETFD
  • LOCK_ES -> F_SETFD, 0
  • LOCK_UN -> F_SETLK, {...} <-- eso es un puntero a una estructura tipo flock</li>
Curiosamenete, la lladama que falla es la que es diferente, el LOCK_UN, que es llamado con un parametro que no pertece a la misma familia (por decirlo de alguna manera) que el resto. En la pagina man viene separado.
La verdad, no tengo claro por que esa diferencia. Se que en el modulo fcntl de python hay un par de directivas de compilacion condicional, pero ahora mismo no parece accesible el enlace que dio Draco y tampoco me suena que afectara de esta forma.

Las pruebas en linux las he hecho con python 2.3.4 y en freebsd con 2.4

[ Padre ]


 

Portabilidad de python | 8 comentarios (8 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:
Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda