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...
IBM: solo il 26% delle imprese dimostra ...
Hacker contro hacker e danni per 740.000...
Xiaomi SkyNomad, boom da 27.147 auto in ...
Logitech concede un giorno di ferie ai s...
Amazon, questi mini PC hanno un display ...
BYD prepara una rivale di smart #2? Il b...
Amazon, 3 robot tagliaerba ECOVACS GOAT ...
La cifratura di WhatsApp e Signal funzio...
Motori elettrici cinesi contro quelli oc...
Windows e macOS sono già vecchi? ...
Sony WH-1000XM5 a 168€ su Amazon: costan...
AliExpress, questo monitor KTC da 27'' &...
TikTok come porta d'ingresso a OnlyFans,...
La Terra ha una mini-luna temporanea: ec...
Amazon, sconto EXTRA del 22% su videogio...
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: 16:44.


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