Torna indietro   Hardware Upgrade Forum > Software > Programmazione

BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
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


BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
Caos Grok Build: le app create con l'IA ...
ChatGPT abbandona le vecchie modalità vo...
Claude adatta un modello alle GPU AMD in...
Stangata alla pirateria da Nintendo: col...
Cisco potenzia AI Defense: arriva l'inte...
Basta cambiare pasta termica: la nuova i...
Aura Ink 10: la cornice E-Ink si rifà il...
Auto cinesi bandite dalle caserme tedesc...
Addio criogenia: il prototipo di compute...
iPhone e iPad possono ora emulare la PS3...
SMS falso dell'INPS: l'app da scaricare ...
Da 120 a 520 qubit: il nuovo chip IBM Ni...
Gemini Decisions API: Google sfida OpenA...
City e-bike in carbonio a un prezzo mai ...
PlayStation 5 supera i 100 milioni di un...
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: 13:38.


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