Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-05-2008, 09:24   #1
stella_650
Member
 
Iscritto dal: Dec 2006
Messaggi: 104
[C UNIX] pipe con 3 processi

Ciao a tutti, avrei bisogno di un aiutino per cercare di capire come potrei risolvere il mio problema. Devo scrivere un programmino che esegua il comando ls | sort -r | grep <pat> dove pat è inserito dall'utente, utilizzando 3 processi distinti.
Il programma che segue mi fa ls e la grep ma nn mi fa la sort...sono sicura che c'è qualche problema nell'uso dei descrittori della pipe...e vorrei un aiutino per capire dove e come agire....grazie in anticipo.

Quote:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc,char *argv[])
{
int pfd[2],pid1,pid2;
if(argc!=2)
{
printf("lsSortGrep <pattern da ricercare>\n");
exit(0);
}
if(pipe(pfd)==-1)
{
perror("pipe() fallita\n");
exit(-1);
}
if((pid1=fork())<0)
{
perror("fork() fallita");
exit(-2);
}
if(pid1==0)
{
printf("Sono il primo...\n");
close(pfd[0]); //chiudo l'estremità di lettura che non uso
dup2(pfd[1],1);
close(pfd[1]);
execlp("ls","ls",NULL);
perror("errore sulla sort\n");
exit(-3);
}

if((pid2=fork())<0)
{
perror("fork() fallita");
exit(-5);
}
//creo il secondo figlio
if(pid2==0)
{
printf("Sono il secondo....\n");
close(pfd[1]);
dup2(pfd[0],0);
close(pfd[0]);
dup2(pfd[1],1);
close(pfd[1]);
execlp("sort","sort","-r",NULL);
perror("errore sulla grep\n");
exit(-3);
}
else
{
printf("Sono il papa'\n");
close(pfd[1]);
dup2(pfd[0],0);
close(pfd[0]);
execlp("grep","grep",argv[1],NULL);
perror("ls fallita");
exit(-4);
}
kill(pid1,1);
kill(pid2,1);
return 0;
}
stella_650 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2008, 10:00   #2
vincenzo83
Senior Member
 
L'Avatar di vincenzo83
 
Iscritto dal: Jun 2001
Messaggi: 458
EDIT 1: .. ho scritto una scemenza

EDIT 2: comunque ho fatto esercizi simili...vedo che hai usato una sola pipe ... io utilizzavo DUE pipe distinte ...
__________________
VIDEOLEZIONI di Matematica, Informatica, Fisica I & II e MOLTO altro, GRATIS !!!
Dooove ? leggete: www.hwupgrade.it/forum/showthread.php?t=1703702


Ultima modifica di vincenzo83 : 28-05-2008 alle 10:06.
vincenzo83 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2008, 11:00   #3
stella_650
Member
 
Iscritto dal: Dec 2006
Messaggi: 104
In quel caso, funzionava?come impostavi il problema?
stella_650 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2008, 11:09   #4
vincenzo83
Senior Member
 
L'Avatar di vincenzo83
 
Iscritto dal: Jun 2001
Messaggi: 458
Allora sono passati diversi mesi dall'ultima volta che ho affrontato questi tipi di esercizi e ho dimenticato alcune cose ... comunque adesso ti copio un esercizio che ho fatto:

Codice:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
  int fdpipe1[2]; /* pipe per ls e grep */
  int fdpipe2[2]; /* pipe per grep e sort */
  pid_t pid;
  char stringa[100];


  printf("stringa: ");
  scanf("%s", stringa);

  if( pipe(fdpipe1) == -1) {
    perror("pipe 1");
    return 1;
  }
 
  if( (pid=fork()) == -1) {
    perror("fork");
    return 1;
  }
 
  /* processo che si occupa di eseguire ls */
  /* l'output di ls deve essere inviato nella pipe 1*/
  if( pid != 0) {
    close(fdpipe1[0]); /* deve solo scrivere */
    dup2(fdpipe1[1], 1);
    /* da questo momento, stdout è il lato scrittura della pipe */
    close(fdpipe1[1]);
    execlp("ls", "ls", NULL);
  }
  else {
    if( pipe(fdpipe2) == -1) {
      perror("pipe 2");
      return 1;
    }
    
    if( (pid = fork()) == -1) {
      perror("fork 2");
      return 1;
    } 

    /* processo che si occupa di eseguire grep */
    /* l'input viene prelevato dalla pipe1  */
    /* l'output viene inviato nella pipe2 */
    if(pid != 0) {
      close(fdpipe1[1]); /* deve solo leggere dalla pipe 1 */
      dup2(fdpipe1[0], 0);
      /* da questo momento, input viene prelevato dalla pipe 1 */
      close(fdpipe1[0]);

      dup2(fdpipe2[1], 1);
      /* da questo momento, l'output viene inviato nella pipe 2 */

      close(fdpipe2[1]);
      close(fdpipe2[0]);
      execlp("grep", "grep", stringa, NULL);
    }
    /* processo che esegue sort */
    /* preleva l'input dall pipe 2 */
    else {
      close(fdpipe1[0]);
      close(fdpipe1[1]);
      
      close(fdpipe2[1]); /* non deve scrivere */
      dup2(fdpipe2[0], 0);
      close(fdpipe2[0]);  
      /* da questo momento l'input viene prelevato dalla pipe2 */

      execlp("sort", "sort", "-r", NULL); 
    }
  }
}
Se hai qualche dubbio,fammi sapere
__________________
VIDEOLEZIONI di Matematica, Informatica, Fisica I & II e MOLTO altro, GRATIS !!!
Dooove ? leggete: www.hwupgrade.it/forum/showthread.php?t=1703702

vincenzo83 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2008, 11:11   #5
vincenzo83
Senior Member
 
L'Avatar di vincenzo83
 
Iscritto dal: Jun 2001
Messaggi: 458
il programma esegue: ls | grep <stringa> | sort -r
__________________
VIDEOLEZIONI di Matematica, Informatica, Fisica I & II e MOLTO altro, GRATIS !!!
Dooove ? leggete: www.hwupgrade.it/forum/showthread.php?t=1703702

vincenzo83 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2008, 11:33   #6
vincenzo83
Senior Member
 
L'Avatar di vincenzo83
 
Iscritto dal: Jun 2001
Messaggi: 458
Quindi se ricordo bene:

il primo processo (P1) crea un figlio (P2) ed esegue il comando 1 e invia l’output nella pipe1. P2 crea un altro processo (P3), prelevare l’input dalla prima pipe, esegue il secondo comando e invia l’output nella seconda pipe. Il processo P3 legge l’input dalla seconda pipe ed esegue il terzo comando.

Gentilmente chiedo agli altri utenti del forum di controllare. Grazie
__________________
VIDEOLEZIONI di Matematica, Informatica, Fisica I & II e MOLTO altro, GRATIS !!!
Dooove ? leggete: www.hwupgrade.it/forum/showthread.php?t=1703702


Ultima modifica di vincenzo83 : 28-05-2008 alle 12:54.
vincenzo83 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2008, 12:27   #7
stella_650
Member
 
Iscritto dal: Dec 2006
Messaggi: 104
grazie per l'aiuto...sei stato gentile. Questi esercizi che danno alla Parthenope... a volte mandano 1po' in crisi.
stella_650 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2008, 12:51   #8
vincenzo83
Senior Member
 
L'Avatar di vincenzo83
 
Iscritto dal: Jun 2001
Messaggi: 458
Quote:
Originariamente inviato da stella_650 Guarda i messaggi
grazie per l'aiuto...sei stato gentile. Questi esercizi che danno alla Parthenope... a volte mandano 1po' in crisi.
Allora sospettavo bene ... pure io sono della Parthenope
__________________
VIDEOLEZIONI di Matematica, Informatica, Fisica I & II e MOLTO altro, GRATIS !!!
Dooove ? leggete: www.hwupgrade.it/forum/showthread.php?t=1703702

vincenzo83 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2008, 13:30   #9
stella_650
Member
 
Iscritto dal: Dec 2006
Messaggi: 104
Anke io.. xke' mi ricordi un mio amico "Ispanico"... Mo si scopre ke sei proprio tu.
stella_650 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2008, 13:49   #10
vincenzo83
Senior Member
 
L'Avatar di vincenzo83
 
Iscritto dal: Jun 2001
Messaggi: 458
Quote:
Originariamente inviato da stella_650 Guarda i messaggi
Anke io.. xke' mi ricordi un mio amico "Ispanico"... Mo si scopre ke sei proprio tu.
LOL non sono "Ispanico" … mai sentito

Comunque, come ho indicato anche sul forum della nostra uni, per la prova di lab, ti consiglio di vedere questo manuale (liberamente scaricabile): gapil
è da qui che ho capito i "retroscena" delle pipe … a discapito di una lunga lettura

__________________
VIDEOLEZIONI di Matematica, Informatica, Fisica I & II e MOLTO altro, GRATIS !!!
Dooove ? leggete: www.hwupgrade.it/forum/showthread.php?t=1703702


Ultima modifica di vincenzo83 : 28-05-2008 alle 13:54.
vincenzo83 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
TSMC approva investimenti record da quas...
L'IA agentica arriva anche sullo storage...
Euro digitale, il Parlamento UE cambia r...
Alphabet e la sua obbligazione centenari...
L'UE anticipa un intervento per bloccare...
Il Trump Phone esiste ma è molto ...
Frodi deepfake fuori controllo: perch&ea...
Consumano il 30% in meno: arrivano i nuo...
Tesla Semi svela i numeri definitivi: 80...
La Air Force statunitense vieta occhiali...
Wi-Fi Intel e Windows: le novità ...
Dongfeng sbarca 'a casa loro': il nuovo ...
BYD ATTO 3 EVO: 3,9 secondi sullo 0-100 ...
Horizon 3 potrebbe arrivare tra 3-5 anni...
Spostare il 40% della produzione in USA?...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:39.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v