PDA

View Full Version : [C] Standard ANSI C e semafori di SystemV


Gica78R
12-04-2005, 19:43
Ciao!
Sto realizzando un programmino (un proxy server http) per un esame universitario. Il prof. chiede che il programma sia scritto in ANSI C, pero' mi sono accorto che se uso i semafori (e quindi la libreria sys/ipc.h), quando vado a compilare con gcc e l'opzione '-ansi' mi compare un warning relativamente al fatto che uso quella libreria (senza l'opzione '-ansi' fila tutto liscio). Ho risolto il problema inserendo nel file che usa la libreria sys/ipc.h la riga
#define _SVID_SOURCE
con la quale la compilazione va a buon fine anche con l'opzione '-ansi'.

Mi chiedo (e vi chiedo): cosi' facendo sto rispettando lo standard ANSI C?
Se no, cosa posso usare per la sincronizzazione al posto dei semafori?

Grazie per ogni eventuale suggerimento!

Gica :cool:

PS: non l'ho specificato, programmo in ambiente Unix (Linux, nella fattispecie)

cionci
12-04-2005, 20:26
Il warning lo ottieni solo sulla libreria ? In tal caso è normale...perchè non essendo uan libreria definita nello standard ANSI C ti viene rilevata... Prova ad includere il percorso della libreria fra doppi apici...

Gica78R
12-04-2005, 23:16
Il warning lo ottieni solo sulla libreria ? In tal caso è normale...perchè non essendo uan libreria definita nello standard ANSI C ti viene rilevata... Prova ad includere il percorso della libreria fra doppi apici...

Questo e' quello che ottengo compilando con l'opzione '-ansi' senza la riga #define _SVID_SOURCE nell' header semafori.h (che e' il file in cui dichiaro le funzioni per lavorare sui semafori e che contiene la direttiva #include <sys/ipc.h> ):
[gianluca@p3 semafori2]$ gcc -ansi semafori.c provect.c -o vect
In file included from semafori.h:19,
from semafori.c:1:
/usr/include/sys/ipc.h:25:3: warning: #warning "Files using this header must be compiled with _SVID_SOURCE or _XOPEN_SOURCE"
In file included from semafori.h:19,
from provect.c:1:
/usr/include/sys/ipc.h:25:3: warning: #warning "Files using this header must be compiled with _SVID_SOURCE or _XOPEN_SOURCE"

Se metto il percorso della libreria tra apici devo dare il path assoluto, vero? Cosi' facendo, pero', non mi gioco la portabilita'?