Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marathon: arriva il Fortnite hardcore
Marathon: arriva il Fortnite hardcore
Marathon è il titolo multiplayer competitivo del momento. Ecco quali sono le caratteristiche di gioco principali, insieme alle nostre prime considerazioni dopo qualche "run" nell'extraction shooter di Bungie
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-03-2006, 11:48   #1
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
[C] Funzione access()

Mi servivano alcune delucidazioni riguarda la funzione access(). Per vedere se un file esiste gli passo il nome del file e la costante F_OK giusto? Il nome del file deve comprendere l'estensione? E alla fine se il file esiste che valore mi torna la funzione? Grazie.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 11:55   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Mi servivano alcune delucidazioni riguarda la funzione access(). Per vedere se un file esiste gli passo il nome del file e la costante F_OK giusto?
Sì. Anche se il metodo non è proprio corretto (il file potrebbe essere eliminato da qualcuno subito dopo la chiamata access)
Quote:
Il nome del file deve comprendere l'estensione?

Quote:
E alla fine se il file esiste che valore mi torna la funzione?
0
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 12:25   #3
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Ok grazie. E per vedere se un file è già aperto con access() si può?
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 12:30   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
mmm non credo.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 12:39   #5
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
No perché siccome devo controllare anche se un file è già aperto (e quando il file aperto ha estensione .$$$) mi chiedevo se si potesse fare. Quindi come potrei fare per controllare questa cosa?
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 12:54   #6
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Non potrei ad esempio verificare sempre con access() l'esistenza del file con estensione .$$$? Cioè io gli passo il file con l'estensione $$$ e se mi torna 0 allora so che è aperto.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 13:35   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Non sono esperto di win32, ma immagino che ci siano modi più efficaci per farlo.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 15:26   #8
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Il programma verrà compilato sotto Linux.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 15:44   #9
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ma... intendi aperto da chiunque o dalla tua stessa applicazione?
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 15:55   #10
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Manugal
Il programma verrà compilato sotto Linux.
Allora devi fare come fa fuser...ovvero sfogliarti /proc/%d/fd/*...
In alternativa puoi usare inotify, ma credo che abbia effetto solo da quando crei il watch in poi
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 16:41   #11
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
x sottovento:
Qui stiamo implementando solo una libreria. Sicuramente sarà aperto da chiunque.

x ilsensine:
purtroppo non posso usare path nel mio programma. Ma a rigor di logica con access() secondo la procedura che ti ho descritto prima non potrebbe andare teoricamente?
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 16:51   #12
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Manugal
x ilsensine:
purtroppo non posso usare path nel mio programma.
Bè ok...ma /proc è un file system virtuale, non vedo perché non potresti usarlo...
Quote:
Ma a rigor di logica con access() secondo la procedura che ti ho descritto prima non potrebbe andare teoricamente?
No, access non indica se un file è già aperto. E' questa una informazione abbastanza complicata da ottenere, per come funziona linux (vedi il casino che fa fuser...). Puoi ad esempio eliminare un file eseguibile mentre è...in esecuzione, senza che il programma in esecuzione si accorga di nulla!
inotify potrebbe aiutarti, ma dovresti implementare un demone che effettua il monitoraggio dei file che ti interessano (se sono noti a priori).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 16:55   #13
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Manugal
x sottovento:
Qui stiamo implementando solo una libreria. Sicuramente sarà aperto da chiunque.

x ilsensine:
purtroppo non posso usare path nel mio programma. Ma a rigor di logica con access() secondo la procedura che ti ho descritto prima non potrebbe andare teoricamente?
Ciao,
all'interno dello stesso processo, puoi usare la stat(). Avendo il descrittore del file, la stat() ti da una serie di informazioni quali inode, ...
Le stesse info le puoi ottenere dato il nome del file. Quindi puoi sapere se il processo attuale ha gia' aperto il file in questione.

Per il controllo fra diversi processi... beh, e' veramente dura.
Per ora mi vengono in mente solo soluzioni parziali, e che ti obbligano a scrivere parecchio codice.

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 17:00   #14
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da sottovento
all'interno dello stesso processo, puoi usare la stat(). Avendo il descrittore del file, la stat() ti da una serie di informazioni...
...non utili a stabilire se il file è già aperto. Anche per vedere se è già aperto dal processo corrente, devi spulciarti /proc/self/fd/*
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 17:03   #15
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Ok grazie.. vedo che sono soluzioni molto complicate

Nel nostro corso all'università non siamo ancora a questi livelli di programmazione. Possibile che i nostri prof ci abbiano dato una cosa così avanzata da fare?

La cosa più semplice quale sarebbe?
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 17:06   #16
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Cioè per farvela breve io devo implementare questa funzione:

Codice:
int DeleteDatabaseFile  	(   	char *   	 Name  	 )   	
  	

Cancella un file di database con nome Name.

Name è una stringa non nulla e NULL terminated e rappresenta il nome del file da cancellare.
Il nome deve essere quello di un DBF precedentemente creato con la funzione CreateDatabaseFile() (che già ho provveduto a creare).
La lunghezza totale del nome viene troncata a DBF_NAME_LENGTH caratteri e viene aggiunta l'estensione DBF_EXTENSION.

Il database deve essere chiuso, cioe' non deve esistere un file con lo stesso nome e estensione DBF_OPEN_EXT.

Parameters:
    [in] 	Name 	Nome del database file, stringa alfanumerica + '_' NULL terminated.

Returns:
    LPC_OK Database cancellato

    LPC_BAD_ARG Nome DB nullo o non valido

    LPC_DBF_OPEN Il database è aperto.

    LPC_FILE_ACCESS Il file non esiste o non può essere cancellato.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 17:08   #17
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Manugal
La cosa più semplice quale sarebbe?
Vuoi dire la cosa _giusta_ quale sarebbe? Sicuramente non la tua logica, perché è soggetta a race. Ad esempio se la tua libreria implementa qualcosa del tipo:
Codice:
if (!isFileOpen(fname))
  OpenFile(fname);
else
   ErrorFileIsOpen();
hai una bella race tra il controllo e l'apertura del file. Queste situazioni si gestiscono con gli advisory lock oppure con i mandatory lock.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 17:10   #18
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da ilsensine
...non utili a stabilire se il file è già aperto. Anche per vedere se è già aperto dal processo corrente, devi spulciarti /proc/self/fd/*
Puoi scandire la lista dei descrittori della tua file table (l'apposito #include ti da la sua lunghezza). Per ogni descrittore puoi ottenere se e' in uso. Nel caso sia in uso, la stat ti dice l'inode. La stessa info la ottieni dal nome del file. Pertanto e' possibile stabilire se il file e' aperto (dal processo attuale) semplicemente usando la stat
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 17:11   #19
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Manugal
Il database deve essere chiuso, cioe' non deve esistere un file con lo stesso nome e estensione DBF_OPEN_EXT.
Ah quindi il vostro professore vuole che utilizziate i lockfile. Un lockfile è un file che contiene il pid del processo che ha aperto il db. Può essere creato in maniera atomica e senza race, creando prima un file temporaneo e poi tentando un link() (hard link) al nome del file vero e proprio. Devi gestire anche il caso in cui un precedente chiamante è "morto" senza eliminare il lockfile.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 17:16   #20
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da sottovento
l'apposito #include ti da la sua lunghezza
L'apposito #include (immagino che stai parlando di FD_SETSIZE) ti fornisce la lunghezza _di default_ da usarsi per la (odiosa) select, che non ha nulla a che vedere con i file che il programma può aprire (e che puoi ridefinire a un valore diverso prima dell'include -- verrà usato il valore da te impostato, in questo caso). Il limite per processo sui file apribili è gestito da ulimit, e ha comunque un massimo assoluto nel kernel (e stiamo parlando di decine di migliaia di file descriptor, se non più, su un sistema normale). E' un metodo lento e poco pratico, e anche questo soggetto a race (v. ambienti multithread).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
Disney vuole comprare Epic Games e Fortn...
ASUS ROG Crosshair X870E Glacial: il nuo...
Samsung Galaxy Watch 9 si avvicina al la...
GTA 6: i costi di sviluppo sono impressi...
SSD Kioxia EXCERIA PRO G2 4TB, prestazio...
TSMC ha raggiunto il limite: starebbe ri...
Tutte le offerte Amazon più pesan...
Microsoft unisce GPT e Claude in Copilot...
MacBook Neo è una trappola second...
Meta testa Instagram Plus: abbonamento a...
Recensione ASUSTOR LockerStor 2 Gen2+: l...
SpaceX conferma anomalia per il satellit...
Apple rilascia le prime beta 26.5 di iOS...
Warhorse Studios sostituisce i traduttor...
Ecco perché in tanti stanno comprando Ap...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:19.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v