Foros del Web » Programación para mayores de 30 ;) » C/C++ »

WNOHANG|WUNTRACED vs WNOHANG||WUNTRACED

Estas en el tema de WNOHANG|WUNTRACED vs WNOHANG||WUNTRACED en el foro de C/C++ en Foros del Web. Buenas!estaba tenia que entregar una práctica a las 9 de la mañana sobre una shell en linux, despues de pasar toda el cuatrimestre me quede ...
  #1 (permalink)  
Antiguo 07/02/2012, 03:37
 
Fecha de Ingreso: octubre-2008
Mensajes: 184
Antigüedad: 15 años, 6 meses
Puntos: 1
WNOHANG|WUNTRACED vs WNOHANG||WUNTRACED

Buenas!estaba tenia que entregar una práctica a las 9 de la mañana sobre una shell en linux, despues de pasar toda el cuatrimestre me quede toda la noche y lo conseguí xDD, ya está enviada y aprobada. Lo único que me extrañó la atención es que hice un manejador de señales de la shell, para controlar si un proceso en segundo plano intenta leer de terminal se suspendiera, esto pensé en arreglaro poniendo pidh=waitpid(ptr->pid,&status,WNOHANG||WUNTRACED); pero accidentalmente puse pidh=waitpid(ptr->pid,&status,WNOHANG|WUNTRACED); (eliminé una barra del or logico, ||)
el caso es que me funciona, y cuando me doy cuenta del fallo lo arreglo poniendo ||, pero ya no funciona , asi que lo dejé como estaba y la envié XDD.

La cosa es que ya por curiosidad lo intenté sacar (después de haberla enviado claro) y no se porque, la shell la hice en ubuntu con c y posix.

A ver si alguien me saca la duda, saludos a todos!
  #2 (permalink)  
Antiguo 09/02/2012, 02:38
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 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,

Etiquetas: funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:37.