Aquí teneis el programa (el que intentaba compilar antes y ahora funciona):
#include <stdio.h>
#include <stdlib.h>
#include
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main (int argc, char * argv[]) {
int t1[2], t2[2], t3[2];
int estado, buffer = 1, f1, f2, fd;
char c;
if (argc != 3) {
printf("Necesarios dos argumentos\n");
exit(-1);
}
// Creamos la tuberia para introducir los datos
pipe(t1);
if (fork() == 0) {
// Creamos las tuberias de sincronizacion entre P1 y P2
pipe(t2); pipe(t3);
// Escribimos en la tuberia para que comience P1
write(t2[1], &buffer, sizeof(int));
// Abrimos los ficheros de caracteres
f1 = open(argv[1], O_RDONLY);
f2 = open(argv[2], O_RDONLY);
// Proceso P1
if (fork() == 0) {
close(t1[0]); close(t2[1]); close(t3[0]);
// Procesar un unico caracter
while (read(t2[0], &buffer, sizeof(int)) && buffer != 0) {
if (read(f1, &c, sizeof(char)))
write(t1[1], &c, sizeof(char));
else
buffer = 0;
// Pasamos el testigo a P2
write(t3[1], &buffer, sizeof(int));
}
// Procesar el resto de caracteres
if (buffer == 0) {
while (read(f1, &c, sizeof(char)))
write(t1[1], &c, sizeof(char));
}
}
// Proceso P2
else {
close(t1[0]); close(t2[0]); close(t3[1]);
// Procesar un unico caracter
while (read(t3[0], &buffer, sizeof(int)) && buffer != 0) {
if (read(f2, &c, sizeof(char)))
write(t1[1], &c, sizeof(char));
else
buffer = 0;
// Pasamos el testigo a P1
write(t2[1], &buffer, sizeof(int));
}
// Procesar el resto de caracteres
if (buffer == 0) {
while (read(f2, &c, sizeof(char)))
write(t1[1], &c, sizeof(char));
}
}
close(f1);
close(f2);
}
// Proceso P3 (Padre)
else {
wait(NULL);
close(t1[1]);
// Leemos todos los caracteres ordenados y los mostramos
printf("Caracteres leidos: ");
while (read(t1[0], &c, sizeof(char))) {
printf("%c", c);
}
printf("\n");
}
return 0;
}
Ya lo solucioné poniendo el DVD de debian, reconfigurando apt con apt-setup y poniendo:
apt-get install build-essential
apt-get install glibc-doc
Gracias de todas formas, Saludos!