Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Un ejemplo práctico de lanzar procesos y escribir en una FIFO. Hacer un proceso padre que
- * generara dos hijos, uno de ellos enviara las letras del abecedario una a una al padre y este las
- * enviara al otro para mostrarlas.
- */
- //No sincronizo reads porque solo leen de a uno
- int main (int argc, char* argv){
- //Crear fifo
- char* fifoHijoPadre = "/tmp/caca"
- char* fifoPadreHijo = "/tmp/caca2"
- int bufferSize = 1;
- int created = mknod(fifoHijoPadre, S_IFIFO, NULL);
- if (created!=0) exit();
- created = mknod(fifoPadreHijo, S_IFIFO, NULL);
- if (created!=0) exit();
- if (!fork()){
- //Padre
- if (!fork()){
- //Padre
- int fdRead = open(fifoHijoPadre, O_RDONLY);
- char buffer[1];
- int fdWrite = open(fifoPadreHijo, O_WRONLY);
- while ( int readbytes = read(fdRead,buffer, bufferSize) == 1){
- int writtenBytes = write(fdWrite, buffer, bufferSize);
- if (writtenBytes < 1){
- //Error
- }
- }
- close(fdRead);
- unlink(fdRead);
- close(fdWrite);
- unlink(fdWrite);
- }else{
- //Segundo hijo
- int fdRead = open(fifoPadreHijo, O_RDONLY);
- char buffer[1];
- while ( int readbytes = read(fdRead, buffer, bufferSize) == 1){
- int writtenBytes = write(fdWrite, buffer, bufferSize);
- if (writtenBytes < 1){
- //Error
- }
- printf("%c\n",buffer[0]);
- }
- close(fdRead);
- unlink(fdRead);
- }
- }else{
- //Primer hijo
- int fdWrite = open(fifoHijoPadre, O_WRONLY);
- char letter[1];
- letter[0]='a';
- for (int i = 0; i<27; i++);
- int writtenBytes = write(fdWrite, letter, bufferSize);
- letter[0]++;
- }
- close(fdWrite);
- unlink(fdWrite);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement