View Full Version : su che ide sono?
Domandina:
Io ho un programmino scritto in c da me.
vorrei sapere da quale hard disk del pc viene usato.
o meglio vorrei sapere se si tratta di hda,hdb,hdc,hdd
per poi potere trarre informazioni circa l'hard disk tramite /proc/ide/......
idee?
ho provato la stat ma da info circa il filesystem.....
ilsensine
26-05-2004, 09:18
man fstat
(campo struct stat::st_dev)
Spostato in Programmazione
grazie per lo spostamento,
ma alle volte se lo sposto io..... mi dicono thread duplicato ecc....
ciao e grazie.
ilsensine
26-05-2004, 10:13
Originariamente inviato da x110
ma alle volte se lo sposto io..... mi dicono thread duplicato ecc....
...come fai TU a spostare un thread? :D
copiarlo?
sinceramente non mi sono mai preoccupato di come spostarlo.
esiste la possibilita' di migrare un mio messaggio?
dev_t st_dev
Identifies the device containing the file. The st_ino and st_dev , taken together, uniquely identify the file. The st_dev value is not necessarily consistent across reboots or system crashes, however.
da cio' sembra che non serva invece dalla man page dice device.
non so...
il tipo dev_t e' un int?
ilsensine
26-05-2004, 10:55
Originariamente inviato da x110
copiarlo?
sinceramente non mi sono mai preoccupato di come spostarlo.
esiste la possibilita' di migrare un mio messaggio?
Lo chiedi a un moderatore ;)
ma stat() è ANSI iso??
No perche VICIUS diceva di si
ilsensine
26-05-2004, 10:58
Originariamente inviato da x110
dev_t st_dev
Identifies the device containing the file. The st_ino and st_dev , taken together, uniquely identify the file. The st_dev value is not necessarily consistent across reboots or system crashes, however.
da cio' sembra che non serva invece dalla man page dice device.
non so...
Le funzioni major() e minor() restituiscono un intero indicante il valore maggiore e minore del device che contiene il filesystem. Dovresti però anche controllare che si tratti effettivamente di un device a blocchi (potrebbe essere una share samba o nfs montata, ecc.).
ilsensine
26-05-2004, 10:59
Originariamente inviato da Luc@s
ma stat() è ANSI iso??
No perche VICIUS diceva di si
No. Da man stat:
The stat and fstat calls conform to SVr4, SVID, POSIX, X/OPEN, BSD 4.3.
The lstat call conforms to 4.3BSD and SVr4
ilsensine
26-05-2004, 11:01
Originariamente inviato da ilsensine
Le funzioni major() e minor() restituiscono un intero indicante il valore maggiore e minore del device che contiene il filesystem. Dovresti però anche controllare che si tratti effettivamente di un device a blocchi (potrebbe essere una share samba o nfs montata, ecc.).
Esempio:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv) {
struct stat st;
if(argc<2) {
printf("Formato: %s <file/directory da testare>\n", argv[0]);
return -1;
}
if(stat(argv[1], &st)<0) {
perror("stat");
return -1;
}
printf("major:minor=%d:%d\n", major(st.st_dev),
minor(st.st_dev));
return 0;
}
Originariamente inviato da ilsensine
Lo chiedi a un moderatore ;)
ok ma so che il sensine e' anche molto comprensivo e disponibile.
sleck..... sleck......eek:
davvero, non posso spostare un thread?
major e minor ok ma come si potrebbe avere la stringa stile /dev/hda?
ilsensine
26-05-2004, 12:24
Originariamente inviato da x110
davvero, non posso spostare un thread?
No
major e minor ok ma come si potrebbe avere la stringa stile /dev/hda?
Manibus :D
Seriamente, i nomi hda ecc. sono significativi solo in user space. Il kernel usa le coppie major/minor per identificare un dispositivo. Visto che ci sono delle convenzioni, puoi usarle per ottenere il nome "standard" per il dispositivo dai suoi maj/min; ad es:
3:0 -> hda
3:1 -> hda1
3:2 -> hda2 (ecc)
3:64 -> hdb
3:65 -> hdb1 (ecc)
22:0 -> hdc (ecc)
22:64 -> hdd (ecc)
ok anche io nella suse ho questa convenzione, ma la mandrake e' diversa
per esempio hda=32 hda1=33 hdd = 37
non ci sono numeri fissi.
una cosa sarebbe confrontare tutti i numeri major in un vettore ma e' una palla, mi domando se non ci sia qualcosa di meglio per non reinventare la ruota.
ilsensine
26-05-2004, 13:04
Originariamente inviato da x110
ma la mandrake e' diversa
per esempio hda=32 hda1=33 hdd = 37
La mandrake usa il devfs, e quel "32" è la dimensione in byte del link simbolico /dev/hda! In realtà il VERO NOME del tuo hda è qualcosa del tipo
/dev/ide/host0/bus0/target0/lun0/disc
Ecco perché non puoi trasformare subito maj/min in device, ma solo usare delle convenzioni: il link /dev/hda esiste apposta in quanto i programmi si "aspettano" che hda esista.
"ls -l /dev/hda" ti farà vedere il link simbolico e a cosa punta.
"ls -l -L /dev/hda" ti dirà la verità sul dispositivo effettivo ;)
avevo notato qualcosa di strano ma forse sara la birra di ieri sera....
grazie.
mi dai una spiegazione da prima riga di man per sto devfs.
cusie'?
grazie. il major device di hda in mandrake e' 3.
ilsensine
26-05-2004, 15:45
Originariamente inviato da x110
mi dai una spiegazione da prima riga di man per sto devfs.
cusie'?
Il devfs è un file system virtuale, che si occupa di "far comparire magicamente" i dispositivi in /dev quando sono rilevati. Ha una sua struttura dei nomi, e per utilizzare anche la struttura standard viene coadiuvato da un demone in user space (devfsd) che si occupa di creare link simbolici ed eseguire altre operazioni. Avrai notato che /dev è zeppa di link simbolici, creati da devfsd.
il major device di hda in mandrake e' 3.
Come su tutti i sistemi linux ;)
insomma uno spettacolo.
grazie di nuovo.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.