Dev - C++ - que diferencia hay entre | y ||

 
Vista:

que diferencia hay entre | y ||

Publicado por Nicolás (1 intervención) el 07/02/2012 10:34:15
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!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

que diferencia hay entre | y ||

Publicado por Capitan Kirk (48 intervenciones) el 09/02/2012 08:45:02
( || ) 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,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar