fork() y pipe(fd) , Hijo y padre se comunican con un pipe, C, linux
Автор: WhileTrueThenDream
Загружено: 2019-05-14
Просмотров: 31543
Cómo un proceso hijo (escritor) se comunica con su padre (lector) con un pipe (sin nombre)
Introducción pipe (min 0:00)
Ejemplo gráfico: padre R, hijo W (min 2:25)
Ejemplo código (min 4:11)
Compila/Corrige warnings/ejecuta (min 11:14)
¿Encontraste el (o los) bug? Gracias por el comentario ! ;-)
BUG:
el mensaje recibido para poder imprimirlo con printf debemos convertirlo en un string:
string en C es un char array terminado en NUll , 0)
Podemos hacerlo de dos maneras:
1.- Escribir en el pipe 6 bytes en lugar de 5. El string "abcde" equivale a: {'a', 'b', 'c' ,'d', 'e', '\0'}. Cambiando el «5» por el «6» envío ese «0» final.
write(fd[1], "abcde",6)
2. Tras leer del pipe añadir el cero de terminación en el buffer: buf[num] = 0x00;
Nota:
Aunque a mi me inprime printf bien, no tiene porqué ser así. El array buf no tiene porqué contener 0 en los bytes no escritos ya que no ha sido inicializado. Si ese fuera el caso printf inprimiría los 5 bytes y otros caracteres raros.
Gracias a aquellos que me habéis indicado el error. Me centré en forl y pipe y olvidé este tema... es muy importante que un string termine en 0 y saber cuándo hay que ponerlo y que funciones precisan ese 0!!
Доступные форматы для скачивания:
Скачать видео mp4
-
Информация по загрузке: