Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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.
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: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-10-2006, 16:04   #1
uReverendo
Member
 
L'Avatar di uReverendo
 
Iscritto dal: May 2006
Messaggi: 69
[C] Trovare il nome del file dal puntatore FILE

Ciao, avendo un puntatore ad una struttura FILE come è possibile recuperare il nome del file?
Ovviamente il file lo apre un'altro programma con la funzione fopen.
uReverendo è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 16:17   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Fammi capire...il programma A apre un file, e il programma B deve capire (dal puntatore FILE * di A) di che file si tratta?
__________________
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 24-10-2006, 16:17   #3
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da uReverendo
Ciao, avendo un puntatore ad una struttura FILE come è possibile recuperare il nome del file?
Ovviamente il file lo apre un'altro programma con la funzione fopen.
No, non è possibile. La struttura FILE è una struttura "opaca" (cioè il programmatore non dovrebbe ficcarci dentro il naso ) il cui contenuto, in termini di campi, può variare da piattaforma a piattaforma e -ciliegina sulla torta- non contiene alcuna informazione sul nome del file aperto.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 16:21   #4
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Quote:
Originariamente inviato da uReverendo
Ciao, avendo un puntatore ad una struttura FILE come è possibile recuperare il nome del file?
Ovviamente il file lo apre un'altro programma con la funzione fopen.
Ti conviene che l'altro programma apra il file usando una struct ad hoc, in questo modo:

Codice:
#define STRING_LENGHT 256

typedef struct FileStruct_t {
   char filename[STRING_LENGTH];
   FILE *fp;
} FileStruct;

...

FileStruct file;
strncpy(file.filename, "nome_del_file.ext", STRING_LENGTH);
file.fp = fopen(...);
In questomodo hai sia il puntatore che il nome del file. Non è possibile, se non erro, conoscere il nome del file dal puntatore restituito dalla fopen, per come è implementato il tutto.
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson

Ultima modifica di -fidel- : 24-10-2006 alle 16:23.
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 16:22   #5
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da andbin
No, non è possibile. La struttura FILE è una struttura "opaca" (cioè il programmatore non dovrebbe ficcarci dentro il naso ) il cui contenuto, in termini di campi, può variare da piattaforma a piattaforma e -ciliegina sulla torta- non contiene alcuna informazione sul nome del file aperto.
No, ma si può ottenere in maniera indiretta. Purtroppo questo non è portabile e dipende dal s/o (ho una idea di come farlo su linux, ad esempio).

Se non ho capito male però, uReverendo parla di "un'altro programma", il che complica le cose...
__________________
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 24-10-2006, 16:25   #6
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da uReverendo
Ciao, avendo un puntatore ad una struttura FILE come è possibile recuperare il nome del file?
Ovviamente il file lo apre un'altro programma con la funzione fopen.

Sotto UNIX:
Utilizzando la fileno () ti puoi far ritornare il descrittore (come se avessi aperto il file con la open()). Dopo di che puoi usare la fstat() per ottenere l'i-node.

Il passaggio da i-node a nome file non dovrebbe essere difficile. E' piu' facile se conosci la directory in cui il file risiede, ovviamente.

Sotto Windows:
Mi piacerebbe proprio saperlo. Il processo di cui sopra non e' applicabile

Spero in nell'intervento di qualcuno piu' preparato, visto che e' un problema interessante (soprattutto in caso di debug di codice altrui che si dimentica di chiudere una risma di file...)
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 16:27   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da sottovento
Sotto UNIX:
Utilizzando la fileno () ti puoi far ritornare il descrittore (come se avessi aperto il file con la open()). Dopo di che puoi usare la fstat() per ottenere l'i-node.
Passare dall'inode al filename non è possibile, in quanto un inode può essere collegato a più filename (hard link) o a nessuno (unlink-after-open).
__________________
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

Ultima modifica di ilsensine : 24-10-2006 alle 16:29.
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 16:29   #8
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
In windows ci sarebbe la GetModuleFilename, credo funzioni anche con i file, ma comunque vuole un HANDLE come paramentro, non un puntatore di tipo FILE, per questo non l'ho proposta.

Per linux anch'io conosco un metodo, ma si basa appunto sulle tabelle del SO, quindi non è portabile...
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 16:30   #9
uReverendo
Member
 
L'Avatar di uReverendo
 
Iscritto dal: May 2006
Messaggi: 69
Quote:
Originariamente inviato da ilsensine
Fammi capire...il programma A apre un file, e il programma B deve capire (dal puntatore FILE * di A) di che file si tratta?
Esatto...
Quote:
Originariamente inviato da andbin
No, non è possibile. La struttura FILE è una struttura "opaca" (cioè il programmatore non dovrebbe ficcarci dentro il naso ) il cui contenuto, in termini di campi, può variare da piattaforma a piattaforma e -ciliegina sulla torta- non contiene alcuna informazione sul nome del file aperto.
Grazie x la risposta. Ma passando il puntatore FILE a fread lui si che lo trova il file Inoltre c'è un'utility "handle" di Mark Russinovich che fa un lavoro simile (restituisce gli handle (con i rispettivi nomi) dei file aperti)
uReverendo è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 16:33   #10
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da uReverendo
Esatto...
Grazie x la risposta. Ma passando il puntatore FILE a fread lui si che lo trova il file
No, trova l'handle del file, scritto in maniera opaca nella struct FILE.
E comunque, in generale, un programma non ci fa niente con il puntatore FILE * di un altro programma. Si può tentare di aggirare anche questo ostacolo, ma si entra ancor più nel complicato e s/o-dipendente.
__________________
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 24-10-2006, 16:35   #11
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da ilsensine
No, ma si può ottenere in maniera indiretta. Purtroppo questo non è portabile e dipende dal s/o (ho una idea di come farlo su linux, ad esempio).
Se parli del descrittore del file, è probabile che sia fattibile ma è da vedere come e su quale S.O. (non c'ho mai provato ).
Su linux anche io avrei una idea, magari stupida: dato il descrittore e il PID, andare in /proc/<num PID>/fd e vedere a cosa corrisponde il link che ha il numero del descrittore.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 16:36   #12
uReverendo
Member
 
L'Avatar di uReverendo
 
Iscritto dal: May 2006
Messaggi: 69
Per chiarirci l'applicazione che apre il file non l'ho scritta io (le sto facendo un debug). Inoltre lavoro su win2000.
uReverendo è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 16:37   #13
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da andbin
Se parli del descrittore del file, è probabile che sia fattibile ma è da vedere come e su quale S.O. (non c'ho mai provato ).
Su linux anche io avrei una idea, magari stupida: dato il descrittore e il PID, andare in /proc/<num PID>/fd e vedere a cosa corrisponde il link che ha il numero del descrittore.
Esattamente. Un veloce readlink e hai fatto.
__________________
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 24-10-2006, 16:40   #14
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da uReverendo
Per chiarirci l'applicazione che apre il file non l'ho scritta io (le sto facendo un debug). Inoltre lavoro su win2000.
Spero ti rendi conto che è una impresa titanica, se non hai i sorgenti del programma.
__________________
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 24-10-2006, 16:48   #15
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da ilsensine
Passare dall'inode al filename non è possibile, in quanto un inode può essere collegato a più filename (hard link) o a nessuno (unlink-after-open).
E' infatti questo la potenza degli i-node, no? Lo stesso file riferito da piu' filename. Volendo li si puo' trovare tutti

Purtroppo il problema e' da risolvere su win 2000, e su questa piattaforma mi sembra un problemone.

Buona notte a tutti
High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 16:53   #16
uReverendo
Member
 
L'Avatar di uReverendo
 
Iscritto dal: May 2006
Messaggi: 69
Quote:
Originariamente inviato da ilsensine
Spero ti rendi conto che è una impresa titanica, se non hai i sorgenti del programma.
Certo che lo so e collegare le strutture FILE ai nomi mi agevolerebbe parecchio. Ho provato ad aprire un paio di file e ad analizzare la struttura FILE di ognuno e ho notato che l'unico membro a variare è _file che dovrebbe identificare il file univocamente.
uReverendo è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 17:01   #17
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Forse puoi ricavarti gli HANDLE aperti dal processo...fidel?
__________________
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 24-10-2006, 17:12   #18
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Quote:
Originariamente inviato da ilsensine
Forse puoi ricavarti gli HANDLE aperti dal processo...fidel?
Se hai l'Handle al processo, basta usare la EnumProcesModules() di psapi.h (psapi.dll).
L'Handle al processo la si ricava facilmente, ad esempio con una EnumProcesses(), seguita da una OpenProcess()

EDIT: ancora meglio!! C'è una bella funzione che si chiama GetMappedFileName(). Basta passare come parametro l'Handle al processo in questione e l'indirizzo da verificare, e se questo si riferisce ad un file caricato dal processo (quindi già aperto), copia in un buffer (passato sempre come parametro) il nome del file.
La descrizione completa è qui ad esempio:
http://msdn.microsoft.com/library/de...edfilename.asp
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson

Ultima modifica di -fidel- : 24-10-2006 alle 17:17.
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2006, 17:17   #19
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da -fidel-
EDIT: ancora meglio!! C'è una bella funzione che si chiama GetMappedFileName(). Basta passare come parametro l'Handle al processo in questione e l'indirizzo da verificare, e se questo si riferisce ad un file caricato dal processo (quindi già aperto), copia in un buffer (passato sempre come parametro) il nome del file.
La descrizione completa è qui ad esempio:
http://msdn.microsoft.com/library/de...edfilename.asp
No funziona solo con i file in mmap...
__________________
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 24-10-2006, 17:57   #20
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Quote:
Originariamente inviato da ilsensine
No funziona solo con i file in mmap...
...e comunque serve a poco, per un problema di fondo. Ho appena provato, ma la EnumProcessModules elenca, come sospettavo, solo le DLL caricate...
Purtroppo non elenca alcun handle riferito ad un file aperto...

Stavo pensando di usare i performance object, ma psapi fornisce le stesse funzionalità (per questo non li uso da secoli). Magari in quel modo si ricava qualcosa, ma dubito.

E' un grosso problema questo...
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson
-fidel- è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Un foglietto di rame e le prestazioni di...
100 agenti AI per dipendente: quello che...
Le 10 migliori offerte del weekend Amazo...
75'' e 85'' QD-Mini LED: 2 TV interessan...
Offerte Amazon sui componenti hardware P...
iOS 27 porterà tante novità...
Tutte le migliori offerte sui robot aspi...
Attenti ai Samsung 990 Pro contraffatti,...
2 prezzi eccezionali: scope elettriche l...
Crimson Desert arriva anche su Switch 2?...
2 iPhone in offerta su Amazon: il 17 256...
Il dodicesimo lancio del razzo spaziale ...
Blue Origin sta assemblando il secondo l...
Meta moltiplica gli investimenti in data...
Addio riflessi fastidiosi? Samsung prese...
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: 11:24.


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