Así que he estado trabajando en un pequeño programa, que crea un archivo, luego crea un proceso secundario que genera un número aleatorio en ese archivo, que mi proceso principal lea el número y juegue un juego simple más alto o más bajo. Cada vez que ejecuto esto, no importa qué número ponga, siempre dice que es demasiado bajo. ¿Dónde está el error?

int main()
{
int fd, m;

    if (mkfifo("myfifo", 0666) < 0)
            perror("mkfifo"), exit(EXIT_FAILURE);

    if (fork() == 0)
    {
            fd = open("myfifo", O_WRONLY);
            srand(time(NULL));
            int n = rand() % 100 + 1;
            close(fd);
            exit(EXIT_SUCCESS);
    }

    fd = open("myfifo", O_RDONLY);
    read(fd, &m, sizeof(int));
    int c = -1;
    while ( m != c )
    {
            if ( c == -1)
                    printf("Guess a number 1-100\n");
            else if (c > m)
                    printf("Too high!\n");
            else if (c < m)
                    printf("Too low!\n");

            printf("Enter your guess: ");
            scanf ("%d",&c);
    }
    printf("Winner! Yes, the answer was %d \n",m);
    close(fd);
    wait(NULL);
    unlink("myfifo");
    exit(EXIT_SUCCESS);
}
c
3
Bakos Dominik 26 abr. 2020 a las 01:05

2 respuestas

La mejor respuesta

El proceso de su hijo nunca escribe a los quince. Simplemente lo abre, genera un número aleatorio y luego lo cierra. Pruebe con un write:

// inside fork() == 0 block
write(fd, &n, sizeof(n));
4
Brian Tracy 25 abr. 2020 a las 22:11

Además de lo que dijo @Brian Tracy, también debe hacer que el proceso padre espere a que el proceso hijo termine de escribir en el archivo antes de que el padre lo lea.

2
afghanimah 25 abr. 2020 a las 22:12