fbpx
Skip to main content

Linux Avanzato 2008-2009

Di più
16 Anni 6 Mesi fa #95775 da annalisa boccitto

Ciao a tutti,

dove è possibile trovare le dispense del corso Linux Avanzato? Sono per caso disponibili pubblicamente, oppure bisogna essere iscritti al corso per poterle avere?

Grazie mille!

John


Ciao, la seconda che hai detto (cit. Quelo)

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
16 Anni 6 Mesi fa #95777 da annalisa boccitto
Scusate se ripropongo queste mie domande

2) sul sito del corso c'e' scritto che la lezione 4 e' stata dedicata al codice di Linux. Di cosa ha parlato? Ha pubblicato qualche dispensa sull'argomento?

3) riguardo alle distribuzioni da utilizzare, vi e' sembrato molto fiscale?
Sinceramente non mi va di spianare la mia distro, tra l'altro gia' faticosamente attrezzata per lavorare sulla tesi, senza un valido motivo

ma credo che siano passate inosservate



P.S. il prof. mi ha risposto a questa domanda:


1) nella dispensa "code di processi" contenuta nel blocco stda si fa riferimento ad una

Citazione:
dispensa studio codice CFS

che pero' non riesco a trovare. Qualcuno sa se e' argomento della seconda parte del corso, oppure semplicemente Bovet si e' dimenticato di pubblicarla?

dicendomi che l'argomento verra' trattato nella seconda parte del corso

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
16 Anni 6 Mesi fa #95882 da chiara sabbatella
Ragazzi qualcuno mi può spiegare perchè in questo prog dove si unsa la chiamata pipe(), scrive il carattere ma non riesce a leggerlo?

Grazie 10000

int p1[2];

void func( void )
{
int r = 0, p = 0;
char buf[1];

sleep(2);

printf("Sono il figlio\n");

r = read(p1[0], buf, 1);

if( r == -1 )
{
perror("Bad read:");
exit(EXIT_FAILURE);
}

printf("Ho letto %d caratteri. Il valore letto è : %c\n", r, buf[0]);
}


int main()
{
int p = 0, fd = 0, w = 0, pter = 0, s = 0;
char stack[2048], buf[1];

buf[0] = 'c';

fd = clone( (void*)func, (stack+2048), CLONE_VM, NULL );

printf("il processo creato ha pid %d\n", fd);

if( fd == -1 )
{
perror("clone:");
exit(EXIT_FAILURE);
}

p = pipe(p1);

if( p == -1 )
{
perror("Bad pipe:");
exit(EXIT_FAILURE);
}


w = write(p1[1], buf, 1);

if (w == -1)
{
perror("Bad write:");
exit(EXIT_FAILURE);
}


pter = waitpid(fd, &s, __WCLONE);

printf("Ho aspettato il processo %d\n", pter);

return 0;
}

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
16 Anni 6 Mesi fa #95883 da chiara sabbatella

Ragazzi qualcuno mi può spiegare perchè in questo prog dove si unsa la chiamata pipe(), scrive il carattere ma non riesce a leggerlo?

Grazie 10000

P.S. Scusate, nel messaggio di prima mancava un pezzo.

/*
Con clone() si creano due processi, uno scrive immediatamente,
uno legge ciò che è stato scritto dopo due secondi e lo stampa
*/

#include <unistd.h>
#include <sched.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>


int p1[2];

void func( void )
{
int r = 0, p = 0;
char buf[1];

sleep(2);

printf("Sono il figlio\n");

r = read(p1[0], buf, 1);

if( r == -1 )
{
perror("Bad read:");
exit(EXIT_FAILURE);
}

printf("Ho letto %d caratteri. Il valore letto è : %c\n", r, buf[0]);
}


int main()
{
int p = 0, fd = 0, w = 0, pter = 0, s = 0;
char stack[2048], buf[1];

buf[0] = 'c';

fd = clone( (void*)func, (stack+2048), CLONE_VM, NULL );

printf("il processo creato ha pid %d\n", fd);

if( fd == -1 )
{
perror("clone:");
exit(EXIT_FAILURE);
}

p = pipe(p1);

if( p == -1 )
{
perror("Bad pipe:");
exit(EXIT_FAILURE);
}


w = write(p1[1], buf, 1);

if (w == -1)
{
perror("Bad write:");
exit(EXIT_FAILURE);
}


pter = waitpid(fd, &s, __WCLONE);

printf("Ho aspettato il processo %d\n", pter);

return 0;
}

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
16 Anni 6 Mesi fa #95884 da Olimpia
Risposta da Olimpia al topic Linux Avanzato 2008-2009
Aggiungendo CLONE_FILES ai flag della clone funziona tutto :)

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
16 Anni 6 Mesi fa #95885 da chiara sabbatella
E questo??????

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

int fd[2];

int main()
{
int f = fork(), p = 0, w = 0, r = 0;
char buf[1], buf2[1];

buf[0] = 'c';

if( f == 0 )
{
printf("Sono il figlio e ho pid %d mio padre è %d\n", getpid(), getppid());

if((p = pipe(fd)) == -1)
perror("Bad pipe");

if((w = write(fd[1], buf, 1)) == -1)
perror("Bad write");
else
printf("Ho scritto %d byte\n", w);

}else
{
sleep(1);
printf("Sono il padre e ho pid %d\n", getpid());

if((r = read(fd[0], buf2, 1)) == -1)
perror("Bad read");
else
printf("Ho letto il byte %c", buf2[0]);

waitpid(-1, 0, 0);
}
}


Ciao e grz

Si prega Accedi o Crea un account a partecipare alla conversazione.