Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
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


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Fire TV Stick 4K Max a 52,99€ e 4K Plus ...
Un algoritmo alla guida di un'azienda in...
Google Pixel 11 Pro con Pixel Buds Pro 2...
iPhone Duo con Face ID e teleobiettivo: ...
512 GB in un solo modulo DDR5: Micron al...
Ti fidi ancora di una sola IA? Arriva l'...
Samsung Galaxy S27 Ultra: un'importante ...
La rincorsa al fotorealismo è 'ol...
Super Smash Bros Melee arriva su Windows...
Xbox Game Pass, tante novità in a...
Samsung copierà Apple? Rincari in...
Google potrebbe rilasciare un'app uffici...
Lies of P, il sequel potrebbe chiamarsi ...
Dreamforce 2026: Salesforce punta sulla ...
SpaceX ha confermato che Flight 14 sar&a...
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: 08:43.


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