[ salec @ 02.07.2004. 14:38 ] @
Posto se u pozivima read, write i llseek ne pojavljuje inode, kako onda da navatam minor broj tog device-a? |
[ salec @ 02.07.2004. 14:38 ] @
[ caboom @ 02.07.2004. 20:56 ] @
koristi stat da dobijes inode fajla (man 2 stat), mada ti u sustini i ne treba inode - mos' da koristis 'vako nesto:
Code: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <linux/kdev_t.h> int main() { dev_t device; struct stat f_stat; if (stat ("/dev/hda", &f_stat) == -1) { fprintf(stderr, "baah!\n"); exit (-1); } device = f_stat.st_rdev; printf ("major %u, minor %u\n", major(device), minor(device)); return 0; } takodje bi major, minor number dobio i sa npr: Code: caboom@buddha: ~ % ls -l /dev/hda brw-rw---- 1 root disk 3, 0 Feb 23 22:02 /dev/hda caboom@buddha: ~ % ls -l /dev/hdd brw-rw---- 1 root disk 22, 64 Feb 23 22:02 /dev/hdd caboom@buddha: ~ % cat /proc/devices Character devices: 1 mem 4 /dev/vc/0 4 tty 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 7 vcs 10 misc 13 input 14 sound 21 sg 36 netlink 81 video4linux 89 i2c 108 ppp 116 alsa 128 ptm 136 pts 180 usb 202 cpu/msr 203 cpu/cpuid 226 drm Block devices: 2 fd 3 ide0 7 loop 9 md 11 sr 22 ide1 43 nbd 253 device-mapper 254 mdp u /proc/devices-u doduse stoje samo major number-i. [ salec @ 05.07.2004. 10:56 ] @
Izvini, sad vidim da nisam napisao da se u pitanju radi o kernel modulu (drajveru) koji treba da funkcionise razlicito za razlicite minor brojeve.
Znaci, neko je otvorio device fajl za moj uredjaj i sad, za neki minor broj hocu da read i write rade na jedan nacin, a na razlicit za neki drugi minor broj. A vidim da read i write nemaju kao ulazni parametar pointer na inode nego samo pointer na file, gde nema na prvi pogled nicega sto bi posluzilo za pronalazenje inode-a, pa me je zanimalo kako to da izvedem. U medjuvremenu sam u Rubinijevoj knjizi pronasao da se to radi prilikom open-a, da tada upisem u file strukturu doticnog fajla pointer na odgovarajucu fops strukturu koju sam spremio za taj slucaj... a ja sam zamisljao da mi u okviru svake funkcije treba switch (minor).. case (sto je moguce kod ioctl, koji se poziva sa jednim od parametara - pointerom na inode, ali ne i kod read i write koji to nemaju), pa sam zato pitao... mislim, ove file operations kanda da nisu sve od iste fele... [ caboom @ 11.07.2004. 10:31 ] @
pa pazi, na kraju se sve zavrsava time da moraju da se postuju POSIX standardi u neku ruku, ali ako ti treba drugaciji nivo apstrakcije nad open/read/write-om uvek mozes da napises svoj api i dodas svoje ekvivalente syscall-ova u kernelu. jeste okolo-izokola, ali time se oslobadjas tereta koji nose standardi i sa druge strane takodje smanjujes portabilnost onoga sto si napisao.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|