Article View: es.comp.os.linux.programacion
Article #6729Re: función leer
From: Horacio Miranda
Date: Mon, 19 May 2003 19:32
Date: Mon, 19 May 2003 19:32
90 lines
3878 bytes
3878 bytes
Para un poco, que cosa quieres hacer, escribir los c�digos del sort y del uniq ?
o quieres simular en un programa la ejecuci�n de "sort < nom.txt | uniq", ya que
de ser as� lo que debes hacer es redirigir la salida estandard de sort a la
entrada estandard de uniq y se acabo.
O lo que quieres es escribir cosas por teclado y que te las ordene ? define bien
tu proyecto antes de escribir t� c�dgio.
Tuareg ha escrito:
> Tengo este programa que ordena palabras y elimina las duplicadas de un
> fichero llamado nom.txt(una palabra por linea). Pero como podr�a hacer
> para que todo esto lo hiciera de un grupo de palabras entradas por
> teclado, separ�ndolas por intro. Y que al final las dejara en un
> fichero o en pantalla, es indiferente.
>
> * Programa que crea dos processos y los comunica por
> una pipe ordinaria.
>
> Equivale a:
> # sort < nom.txt | uniq
> Creamos una pipe y dos procesos, el primero proceso leera del
> fichero nom.txt (un nombre por linea) y ejecutara un sort, con
> el segundo proceso se eliminaran los duplicados.
>
> #include <fcntl.h>
> #include <stdio.h>
> #include <errno.h>
>
> #include <stdlib.h>
>
> void error(char *m)
> {
> write(2, m, strlen(m));
> write(2, "\n", 1);
> exit(1); /* provoca la finalitzacion del proceso */
> }
>
> main()
> {
> int p[2];
> int proces1, proces2, st1, st2;
>
> /* Creamos una pipe ordinaria y recibimos los files desc.de lectura y
> escritura (p[0] i p[1] respectivament */
> if (pipe(p) < 0) error("Creando pipe ordin�ria");
>
> switch (proces1 = fork())
> {
> case -1 : error("Fork 1");
>
> case 0 : /* Proceso hijo 1 */
> close(1); dup(p[1]);
>
> close (p[0]); close(p[1]);
> execlp("sort", "sort", "nom.txt", (char *)0);
> error("executant ls ");
>
> default: /* Proceso padre */
> break;
> }
>
> switch (proces2 = fork())
> {
> case -1 : error("Fork 2");
>
> case 0 : /* Proc�so hijo 2 */
>
> close(0); dup(p[0]);
>
> close (p[0]); close(p[1]);
>
> execlp("uniq", "uniq", (char *)0);
>
> error("ejecutando uniq ");
>
> default: /* Proceso padre */
> break;
> }
>
> close(p[0]); close(p[1]);
> /* Esperamos que acaben los 2 hijos */
> wait(&st1);
> wait(&st2);
> }
--
Atte., Horacio Miranda Aguilera
PostgreSQL. Because life's too short to learn Oracle. :)
Technical Details
Message-ID:
<3EC9313A.F48FCF9A@yale.cl>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!logbridge.uoregon.edu!news-peer.gip.net!news.gsl.net!gip.net!news-santiago!nova.entelchile.netReferences:
<e2eee5e.0305181354.5648c48b@posting.google.com> <e2eee5e.0305190822.61450289@posting.google.com>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,6217607b5fc9d798 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2003-05-20 03:27:48 PST Message-ID: <3EC9313A.F48FCF9A@yale.cl> Date: Mon, 19 May 2003 15:32:10 -0400 From: Horacio Miranda <hmiranda@yale.cl> X-Mailer: Mozilla 4.78 [es] (Win98; U) X-Accept-Language: es MIME-Version: 1.0 Newsgroups: es.comp.os.linux.programacion Subject: Re: función leer References: <e2eee5e.0305181354.5648c48b@posting.google.com> <e2eee5e.0305190822.61450289@posting.google.com> Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit NNTP-Posting-Host: 200.72.213.250 X-Original-NNTP-Posting-Host: 200.72.213.250 X-Trace: nova.entelchile.net 1053375762 200.72.213.250 (19 May 2003 16:22:42 -0400) Lines: 92 X-Original-NNTP-Posting-Host: 200.72.213.250 Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!logbridge.uoregon.edu!news-peer.gip.net!news.gsl.net!gip.net!news-santiago!nova.entelchile.net