Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Con la quattordicesima generazione Lenovo ridisegna il suo ThinkPad più iconico attorno al nuovo Space Frame e ai processori Intel Core Ultra Series 3. Resta sotto 1Kg, è molto più semplice da riparare e si rivolge al professionista che lavora in mobilità, con un prezzo da prodotto di vertice.
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Le Jabra Evolve3 85 non sono semplicemente cuffie Bluetooth con cancellazione del rumore. Sono un dispositivo professionale pensato per chi trascorre gran parte della giornata in riunione, al telefono o davanti a un assistente basato sull'intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-03-2006, 12: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, 12: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?
Sì
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, 13: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, 13: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, 13: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, 13: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, 14: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, 16: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, 16: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, 16: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, 17: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, 17: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, 17: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, 18: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, 18: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, 18: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, 18: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, 18: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, 18: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, 18: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


HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
Infomaniak lancia lo storage a oggetti S...
Rocket Factory Augsburg ha posticipato i...
Lightning Tables, Confluent promette olt...
Isar Aerospace potrebbe lanciare nuovame...
Boston Dynamics ha messo le ruote da mon...
NVIDIA Lyra 2.0 trasforma una foto in un...
Nuova Vespa Elettrica 2027: stesso look,...
Samsung Galaxy in difficoltà: la One UI ...
DAZN MyClubPass, Netflix e HBO Max a 23 ...
Amazon Seconda Mano, è partito lo...
Musk sgancia la bomba su Tesla: pochi mo...
Black Friday Amazon, le offerte sono par...
Synaptics minaccia uno sviluppatore: con...
Polestar: nuovo partner a Milano, showro...
Amazon, crolla il prezzo della Blink Arc...
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: 15:01.


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