Pages: [1]   Go Down
Print
Author Topic: librerie aggiornate e problemi con GCC  (Read 956 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« on: 16-02-2009, 15:12:11 »

Creo questo post per mettere in evidenza il discorso che era iniziato in un altro topic:

Quote
tornando al mio problema ho trovato la soluzione. Il dubbio è sorto quando i programmi si bloccavano nonostante il codice fosse corretto. Così ho compilato il codice del prof e lo stesso problema si ripresentava. Così ho subito pensato alle nuove librerie di linux e cercando in rete, al sito http://www.docmirror.net/it/linux/howto/misc/GCC-HOWTO/GCC-HOWTO-4.html ho trovato:

Quote
Problema

I sistemi POSIX controllano la presenza di segnali più frequentemente rispetto a sistemi UNIX più vecchi. Linux può eseguire dei gestori di segnali:

    * in modo asincrono (tramite un timer)
    * al ritorno da ogni chiamata di sistema
    * durante l'esecuzione delle seguenti chiamate di sistema: select(), pause(), connect(), accept(), read() su terminali, su socket, su pipe o su file in /proc, write() su terminali, su socket, su pipe o sulla line printer; open() su FIFO, su PTY o su linee seriali, ioctl() su terminali; fcntl() con il comando F_SETLKW; wait4(), syslog(), ogni operazione TCP o NFS.

Per altri sistemi operativi potrebbe essere necessario includere in questa lista le chiamate di sistema creat(), close(), getmsg(), putmsg(), msgrcv(), msgsnd(), recv(), send(), wait(), waitpid(), wait3(), tcdrain(), sigpause(), semop().

Se un segnale (per il quale il programma ha installato un gestore) avviene durante una chiamata di sistema, viene chiamato il gestore. Quando il gestore restituisce il controllo (alla chiamata di sistema), essa rileva che è stata interrotta e restituisce immediatamente -1 e errno = EINTR. Il programma non si aspetta che questo accada, pertanto si blocca.

inoltre lo stesso problema si presenta quando si passa alla chiamata gethostbyname una stringa (ad esempio se passate "120.0.0.1") mentre funziona se assegnate ad un char[] il valore e lo passate alla chiamata.L'unica cosa che non ho capito è come risolvere il problema. Il sito dice:
Quote
int result;
while (len > 0) {
        result = read(fd,buffer,len);
        if (result < 0) { if (errno != EINTR) break; }
        else { buffer += result; len -= result; }
}

ma da dove importo EINTR ? e errno ?



Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
Pages: [1]   Go Up
Print
Jump to: