fbpx
Skip to main content
  1. Lecci
  2. Ingegneria Informatica - Specialistica
  3. Martedì, 25 Aprile 2006
  4.  Subscribe via email
Ciao a tutti, che qualcuno puo postare qualche vecchia verifica fatta da Bovet negli anni passati?
Grazie
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Vortex, scusa l'ignoranza... mica potresti mandarmi un esempio di processi che si inviano segnali come richiesto dalla prova che hai fatto?
faipat@tin.it
Grazie in ogni caso.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Certamente, ecco un esempio: http://www.gnu.org/software/libc/manual ... ample.html
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Questo prog è corretto?

#include <stdio.h>
#include <signal.h>
#include <sched.h>

int flag = 5;

void gestoreSegnale() {
printf("Segnale ricevuto dal padre... ";);
printf("Decremento di uno la varibile globale flag!\n";);
flag = flag-1;
}

int funzioneClone() {
char c;
signal(SIGUSR1,gestoreSegnale);
while(1) read(0,&c,1);
}

main() {
int pid, i;
int stackclone[1024];
pid = clone(funzioneClone,&stackclone[1023], CLONE_VM, NULL);
printf("Valore iniziale della variabile globale flag = %d\n", flag);
for(i=0;i<5;i++) {
kill(pid,SIGUSR1);
sleep(2);
}
printf("Il padre uccide il processo clone!\n";);
kill(pid,SIGKILL);
printf("Valore finale della variabile globale flag = %d\n", flag);
}
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Ciao a tutti, solo per curiosità, com'era il compito di ieri?

Ciaoo
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
E quando iniziano le prossime prove di laboratorio? l'8 maggio?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Bha secondo me la prova di ieri era nella difficoltà media delle prove preliminari di Bovet, praticamente mi avrà bocciato di nuovo...
Per la prova di laboratorio a quanto ho capito devi inviare una mail al professore ma non sono sicurissimo. Una domanda: ma il prog che ho scritto prima sarebbe stato sufficiente per superare la prova di laboratorio?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Intanto vi posso rassicurare sulla verifica di laboratorio; l'ho fatta oggi ed era molto semplice.
Tempo a disposizione: 1h:30
Testo:
Il processo padre crea un processo clone ad invia ad esso 5 segnali consecutivi di tipo SIGUSR1 intervallati da attese di 2 sec.
L'azione da eseguire in corrispondenza alla ricezione di un segnale SIGUSR1 consiste nel decrementare il valore della variabile globale flag che è stata inizializzata a 5.
Il processo clone esegue un ciclo senza fine che consiste nell'aspettare un segnale, stampare un messaggio ed aspettare il prossimo segnale.
Dopo aver inviato 5 segnali, il processo padre elimina il processo clone e stampa l'attuale valore di flag.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Raga, ma si è stuccato il forum "originale" di linux avanzato? Volevo sapere una cosa: nella prova preliminare del 2 maggio per convertire la stringa in numero bisognava necessariamente usare la funzione atoi()?


No, anzi ci è stato proibito di usare la atoi, dovevamo analizzare un carattere della stringa alla volta e costruire man mano il numero, facendo MOLTA attenzione alla possibili eccezioni (lettera, overflow, ecc)
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Puoi srivere qui brevemente come si poteva fare la conversione senza la atoi()?
Grazie
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
La parte della conversione char -> int l'ho fatta con una serie di if/else if così (non mi ricordo bene numeri di errore che doveva restituire):

*num = 0;
for(pos = 0; pos<lungStringa; ++pos) {
*num *=10;
if(*(stringa+pos) == '0') {
*num += 0;
}
else if(*(stringa+pos) == '1') {
*num += 1;
}
else if(*(stringa+pos) == '2') {
*num += 2;
}
else if(*(stringa+pos) == '3') {
*num += 3;
}
else if(*(stringa+pos) == '4') {
*num += 4;
}
else if(*(stringa+pos) == '5') {
*num += 5;
}
else if(*(stringa+pos) == '6') {
*num += 6;
}
else if(*(stringa+pos) == '7') {
*num += 7;
}
else if(*(stringa+pos) == '8') {
*num += 8;
}
else if(*(stringa+pos) == '9') {
*num += 9;
}
else {
printf("La stringa contiene un non-numero\n";);
*num = 0;
return -3;
}
}

Naturalmente prima ho controllato la lunghezza della stringa , se era maggiore di 10 mi fermo subito.
Dopo aver creato il numero ho controllato che il numero non andasse il overflow. Tale controllo l'ho fatto rianallizando la stringa di partenza:

if(lungStringa == 10) {
if(*stringa > '4') {
printf("%d\t\toverflow\n", *num);
*num = 0;
return -1;
}
else if(*stringa == '4') {
if(*(stringa+1) > '2') {
printf("%d\t\toverflow\n", *num);
*num = 0;
return -1;
}
else if(*stringa == '2') {
...
...
...
...
...
}
}
}

Magari ci sono metodi migliori per fare l'ultimo controllo, ma non me ne sono venuti altri in mente.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
oggi sono andato da bovet per fare la prova orale e fortunatamente me l'ha fatta fare alle 15:00 (ha deciso al volo).

dopo la prova ho chiesto come dovete fare voi per quanto riguarda la prova di laboratorio e la prova orale.

chi deve fare la prova di laboratorio > dovreste mandargli una mail in cui vi prenotate; dice che gli sono arrivate 3 richieste e aspetta che gliene arrivino abbastanza per fissare una data. ha anche detto che lui non può aspettare all'infinito quindi chi non si prenota verrà probabilmente rimandato a settembre.

chi deve fare la prova orale > ha detto che scriverà sul sito data e ora ma io vi esorto a farvi sentire, mandategli una mail in cui chiedete quando ha deciso di farvi l'orale.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Scusa deat, ma una volta convertita la stringa in numero non potevi controllare solamente se

if(valore>4294967295) {(*val)=0;
return (-3);
}
?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Scusa deat, ma una volta convertita la stringa in numero non potevi controllare solamente se

if(valore>4294967295) {(*val)=0;
return (-3);
}
?


no, perchè quello è il valore massimo, dopo di che se ad esempio ci sommi 1 viene 0, quindi comincia a ciclare, quindi qualsasi numero (ad esempio 10^100) sarà sempre minore o uguale a quel numero. Sper di essempi spiegato, comuque prova a fare un programma in cui sommi a 4123456789 1234567890 e poi stampa il risulato (ricordati di usare gli unsiged int e %u nella printf)
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Ok, ho capito quello che dici tu, ma se scrivo:

if(valore>429496729[size=4]4[/size]) {(*val)=0;
return (-3);
}
in modo tale che 10^100 lo considera...
Correggimi se sbaglio.
Comment
There are no comments made yet.
  • Page :
  • 1
  • 2


There are no replies made for this post yet.
Be one of the first to reply to this post!