🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #12185

Re: fork(), pipes,... no mentero

#12185
From: cesar m. redondo
Date: Wed, 22 Aug 2001 12:56
56 lines
3104 bytes
A ver que su te explico de una manera sencilla y r�pida:

    fork() -> crea un proceso hijo, esto quiere decir que el programa que
tu estas ejecutando va a existir dos veces a partir del punto donde aprezca
el fork, se va a ejecutar una vez para el padre y otra para el hijo a la
vez, pero solo el c�digo que este despues del fork(). Cada proceso es
independiente lo que cambies en las variables de uno no se entera el otro,
cada uno tiene su zona de memoria.

    pipe() -> crea una tuber�a, lo que hace es crear un mecanismo a traves
del cual dos procesos van a poder intercambiar informaci�n, es una tuber�a
por la que van los datos. esta funci�n devuelve un entero que te dice si ha
habido alg�n error y recibe como parametro un vector de enteros de dos
posiciones, la primera posicion te da el descriptor (numero que representa
a la tuber�a) de lectura y la segunda posicion del vector te da el
descriptor de escritura, asi con la funci�n write() y read() puedes enviar
mensajes por la tuber�a usando esos descriptores que has creado con pipe()

Ejempluchos :
/********************* FORK() **************************/
switch(fork())
{
                        case -1:
                                perror("\nError al hacer el fork ");
                                exit(-1);
                                break;
                        case 0:
                                printf("Codigo ejecutado solo por el
HIJO");
                                break;
                        default:
                                printf("Codigo ejecutado solo por el
PADRE");
                                break;
}

printf("Codigo ejecutado por el PADRE y el HIJO");


/************************** PIPE() ***************************/

int desc[2];
int error = 0;
char letras[7];

error = pipe(desc);

if ( error == 0 )  // no hay ningun error
{
    write(pipe[1], "eo",strlen("eo"));
    read(pipe[0], (char *) letras, 7);
}

// aviso este cacho de codigo no aseguro que funcione, lo del write y read
es para que veas como se usan // esas funciones, pero no se si un mismo
proceso puede enviarse mensajes a si mismo por la pipe.
Technical Details
Message-ID: <3B83ABFE.11FF4460@mad.tecsidel.es>
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!newsfeeds.belnet.be!news.belnet.be!news-ge.switch.ch!news.rediris.es!news-2.rediris.es!tidos.tid.es!not-for-mail
References: <6nvg7.24112$322.414183@telenews.teleline.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,6b0d03b6e42024c5
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2001-08-22 06:10:05 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!newsfeed.stanford.edu!newsfeeds.belnet.be!news.belnet.be!news-ge.switch.ch!news.rediris.es!news-2.rediris.es!tidos.tid.es!not-for-mail
From: "cesar m. redondo" <cesar.redondo@mad.tecsidel.es>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: fork(), pipes,... no mentero
Date: Wed, 22 Aug 2001 14:56:30 +0200
Organization: Telefonica I+D
Lines: 57
Message-ID: <3B83ABFE.11FF4460@mad.tecsidel.es>
References: <6nvg7.24112$322.414183@telenews.teleline.es>
NNTP-Posting-Host: 172.18.70.44
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Mailer: Mozilla 4.61 [en] (X11; I; Linux 2.2.12-20 i686)
X-Accept-Language: es