Newsgroup: it.comp.lang.c
Titolo: utility File

Esiste una funzione che passato il nome di un file mi controlli la sua
esistenza senza aprirlo ?
Oppure se devo far verificare l 'esistenza di questo file usando la
fopen :
se piu' utenti cercano di aprire lo stesso file in contemporanea in sola
lettura per poi chiuderlo subito nell 'istruzione successiva cosa
succede ?
(NB posso avere 120 accessi contemporanei allo stesso file [caso limite]
)
Io lavoro su macchine sco - unix .

succede ?
succede che non ottieni cio' che vuoi perche' ottieni che il file non
esiste.

Mi puoi spiegare la sintassi di access() ?
es: access(nomefile)=null ....


 esistenza senza aprirlo ?
access()
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

Mi puoi spiegare la sintassi di access() ?
es: access(nomefile)=null ....


 esiste.
  per quale motivo?
Ivan Molella

perche' non sarebbe sicuro?
perche' la fopen() fallisce nel caso in cui il file e' condiviso da
piu' utenti.

es: access(nomefile)=null ....
man access

 Mi puoi spiegare la sintassi di access() ?
if (access("/<percorso>/nome_file", F_OK) == 0) {
   /* il file esiste */
}
Maggiori dettagli nella documentazione.
Per queste domande sono più indicati NG come it.comp.os.unix oppure 
it.comp.os.linux.development.


 piu' utenti.
Questa dove l'hai letta su focus? :):)
Ivan Molella

Questa dove l'hai letta su focus? :):)
E' risaputo che fopen() lavora in questo modo. Informati.


Premetto che sono un pacifista, ma fopen può aprire in read-only, cioè
fopen ("miofile", "r")
un file già aperto allo stesso modo da un altro utente (ovviamente
devono esserci i permessi e il file deve esistere :) )
non c'è nessun problema di fondo nel leggere tutti assieme un regular
file.
... ma per carità non litighiamo...
ciao, oops

 Io lavoro su macchine sco - unix .
La funzione che cerchi si chiama stat (unistd.h). man stat.
ciao, oops.

 E' risaputo che fopen() lavora in questo modo. Informati.
  Tanto per la cronaca, io lavoro so un sistema digital 4100/8400 conu S.O
digital unix v 4.0.
Vorrei precisare anzi tutto che lo standard ISO C  non prevede il concetto di
"utente" in nessuna maniera,ne tanto meno nella maniera in cui lo percepisce
unix.
Forse intendevi dire "...condiviso da piu' processi.",il che mi fa notare che
lo standard ISO C non prvede neanche il principio di condivisione di risorse
da parte di + processi contemporaneamente,ne il concetto di trhead e via
discorrendo,tanto e' vero che sotto sistemi unix per gestire la condivisione
di risorse si usano le famose IPC.
Comunque domani provero' ad aprire 2 files in lettura e ti sapro' dire.....
Ivan Molella

 Ivan Molella
Volevi dire << aprire lo stesso file da 2 utenti >> suppongo. Allora
vedrai che va.
ciao, oops.

devono esserci i permessi e il file deve esistere :) )
E se i permessi non ci sono ?
L'uso di fopen() non e' sicuro : per questo scopo si usa access().

Comunque domani provero' ad aprire 2 files in lettura e ti sapro' dire.....
E' inutile parlare di standard ISO per un'applicazione specifica che
puo' basarsi su standard POSIX.
Si usa access().

Hai assolutamente ragione. 
Vorrei ricordare che lo standard POSIX e' il secondo standard di
riferimento dopo ISO, per cui se si vuole parlare in questo thread lo
si faccia in riferimento a questo standard, altrimenti non si
intervenga e basta.


Cioè: fopen è sicura, e per verificare l'accesso si usa access. O magari
stat se vuoi avere più informazioni. Sul fatto che non si debba usare
fopen siamo sempre stati d'accordo.
Dire che "fopen fallisce nel caso in cui il file è condiviso da più
utenti" è però tutt'altra cosa, non ti pare?
pacificamente ciao.

 Si usa access().
  E quando provero' a compilarlo su sistemi non posix cosa faro?
  La parte in ISO C potro' continuare ad utilizzarla,mentre tutto il codice
posix dovro' riscriverlo!
 Non dico che non si debbano usare funzioni posix,o XPGX o Xopen ecc... ma
quando e' possibile e' preferibile attenersi ad uno standard universlmente
riconosciuto da tutti i compilatori c,al fine di diminuire al minimo il lavoro
di un eventuale porting.
PS: Ho provato ad aprire contemporaneamente lo stesso file in modalita' "r+" da
due processi di due utenti diversi con il mio linux.Risultato: la open non
fallisce in nessuno dei due casi...........
Ivan Molella

Salve,
mi è capitato talvolta di sentir parlare di "metaprogrammazione" senza
mai capirerealmente di cosa si tratta.
Qualcuno sa dirmi 2 parole a riguardo e soprattutto sa indicarmi dei
siti da cui apprenderne
1)le basi
2)gli scopi
3)le tecniche?
Grazie