0 votos

Mi código produce una salida extraña en el Terminal

He puesto un pequeño programa para resolver el "problema de los filósofos comedores" en repl.it, donde se ejecuta como se espera y produce la siguiente salida:

Cuando compilo y ejecuto el mismo programa en MacOS obtengo

Sospecho que la configuración de la terminal es incorrecta, ¿cómo puedo solucionarlo?

5voto

Jose Chavez Puntos 645

Este problema definitivamente no se debe al reinicio de la NVRAM, así que no te preocupes por eso.

Básicamente estás tomando un programa (main.c) y compilándolo en tu Mac con el compilador clang suministrado por Apple para crear el main ejecutable. Aquí es donde aparecen las advertencias de desaprobación, que en sí mismas no suelen indicar un problema como tal con el programa - sólo que si este fuera un programa "real" (y no una demostración educativa) querrías usar una alternativa para sem_init() .

La salida de este programa ahora difiere bastante de la salida del mismo programa ejecutado en Ubuntu o en repl.it, que es esencialmente una especie de interfaz remota a una máquina Ubuntu.

Puedo confirmar que obtengo la misma salida que tú en el Mac, y que difiere bastante de la salida en Ubuntu, ya que no se adhiere a la anchura de 11 elementos de la tabla emitida. Así que este problema no es específico de tu Mac.

La razón por la que el programa difiere es que la implementación de las funciones de semáforo en MacOS difiere de la implementación de Ubuntu. Normalmente esto indicaría que hay un error en tu programa main.c.

El error es que el código no comprueba el valor de retorno de la función sem_init() en la función main(). Si se comprobara el valor de retorno, se vería que devuelve -1, lo que significa que se ha producido un error. No tiene sentido continuar después de que se produzca el error, ya que esto significa que esencialmente cada operación siguiente en ese semáforo fallará.

La razón por la que el código falla es que estás intentando crear un semáforo sin nombre, que no está soportado en MacOS. Podrías arreglar el programa en MacOS sustituyendo las llamadas a sem_init() con llamadas a sem_open() . Nótese que este último devuelve un puntero al semáforo en lugar de tenerlo como parámetro de salida.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X