Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/02/2012, 02:38
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: WNOHANG|WUNTRACED vs WNOHANG||WUNTRACED

(Es la misma respuesta que te he posteado en La Web del Programador)

( || ) es la operación OR a nivel de operandos, es decir, A || B dará Verdadero si A ó B ó ambos son verdaderos, y dará Falso sólo si ambos operandos A y B son falsos. A estos efectos, se considera Verdadero un operando con valor distinto de cero, y Falso un operando con valor cero. En tu caso, el resultado de WNOHANG || WUNTRACED siempre será 1 ó 0, independientemente de los valores de ambas.

( | ) es la operación OR a nivel de bits, es decir, se efectúa la operación OR bit por bit. Por ejemplo, sean dos operandos A y B (para este ejemplo, los pongo en binario con 4 bits):

A = 1000
B = 0010

A || B = 1 (A != 0 y B != 0, por tanto A || B = 1)

A | B = 1010

Por lo que veo en tu consulta, parece que WNOHANG y WUNTRACED serían valores que corresponden a bits determinados de una palabra de estado, y lo que hace la función waitpid es esperar a que aparezca un determinado patrón de bits en una palabra de estado. La expresión correcta debe ser la segunda (además es lógico, es la que ha funcionado), la primera puede ser debida a algún error tuyo de lectura o error tipográfico.

Saludos,