|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 51
|
[C] problema warning
Buonasera,
vorrei chiedere un consiglio... In un programma voglio "aprire" una directory, tra i vari modi in cui questo è possibile, ce ne sono alcuni che mi danno dei problemi. In particolare: 1) se scrivo: #include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <fcntl.h> . . int value; DIR * dfs; dfs = fdopendir( ( value=open(".", O_RDONLY) ) ); . . al momento della compilazione con gcc -g -Wall -o ...... mi segnala WARNING implicit declaration of fdopendir WARNING assignment makes pointer from integer without a cast 2) se scrivo: #include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <fcntl.h> . . int value; value = open(".", O_RDONLY | O_DIRECTORY); . . al momento della compilazione con gcc -g -Wall -o ...... mi segnala ERROR O_DIRECTORY undeclared... PERCHE'? Ho anche visto (man 2 open) che per usare O_DIRECTORY potrebbe essere necessario specificare la _GNU_SOURCE macro..... cosa vuol dire???? Ciao e grazie, Francesco |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per il secondo:
Codice:
O_DIRECTORY
If pathname is not a directory, cause the open to fail. This
flag is Linux-specific, and was added in kernel version 2.1.126,
to avoid denial-of-service problems if opendir(3) is called on a
FIFO or tape device, but should not be used outside of the
implementation of opendir(3)
Per la prima, è strano che non funzioni. E' definita all'interno di dirent.h, probabilmente c'è qualche bug. In ogni caso se prima dichiari te la funzione dovrebbe andare tranquillamente: extern DIR *fdopendir (int __fd); Ci sta anche che non venga definita perché rinchiusa in qualche define. A quanto sembra è una estensione GNU ancora non POSIX. In ogni caso la scelta migliore è usare opendir. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 51
|
Ciao Cionci...
il fatto è che la opendir mi serve per poi mandare l'elenco delle entries tramite una socket (che dovrebbe essere un FIFO), quindi volevo provare negli altri 2 modi. Alla fine ho capito che bastava includere la macro: #define _GNU_SOURCE ma perchè funzioni DEVE essere messa PRIMA dei vari #include... ciao e grazie per la risposta (ma ho aperto anche un'altra discussione) Francesco |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:09.



















