A rövidítés
kényelmes ugyan, csakhogy
máshová vezet.
Gyerekkoromban járta az a vicc, miszerint
- Mi a különbség a hullámvasút és a női mell között?
- Semmi! Mindkettő a gyerekeknek készült, de a felnőttek élvezik.
Nos, hasonlóan sikeres és de félreértelmezett találmánya volt a világnak a linuxos procfile rendszer. Eredetileg afféle üvegzseb projektnek készült, hogy a kernel modulok állapotáról valami közelebbi információt tudhasson meg a kernel kényének-kedvének amúgy is kiszolgáltatott felhasználó. De aztán a ferdehajlamú kernelmodulfejlesztők rátették a kezüket procfile-okra és szép lassan a linuxon a user mode és a kernel mode közötti adatcsere egyik legfőbb csatornája lett. Ezen keresztül lehet bonyolultabb konfigurációs parancsokkal ellátni egy modult, de akár arra is alkalmas, hogy nagyobb mennyiségű adatot kiolvassunk a modulból. A procfile önmagában egy virtuális file, amibe a külső felhasználó bele tud írni tud, vagy olvasni tud belőle. Az íráshoz/olvasáshoz szükséges buffereket és függvényeket a kernel modulnak kell implementálnia. Nos mi egy hálókártyáról érkező forgalmat szűrtünk meg és dolgoztunk fel, amit aztán egy user mode applikáció egy procfile-on keresztül kiolvasott a kernel modulból. A rendszer kiválóan működött egy darabig aztán minden egyéb hibajelzés nélkül leállt a kiolvasás. Jó néhány nap próbálgatás után kiderült, hogy körülbelül 2Gbyte adat kiolvasása után. Gusztustalan furmányok segítségével (időnként lezártuk és újranyitottuk a procfile-t) sikerült áthidalni a problémát, mígnem nemrég rájöttünk a probléma gyökerére.
Procfile-t normális módon úgy lehet létrehozni, hogy a user definiál egy leírót amiben benne van minden egyes file művelethez egy függvény pointer, amihez aztán meghívódik a megfelelő műveletkor. Ezt a leírót kell aztán megadni a tulajdonképpeni procfile létrehozásakor. Így ni
Kesőbb láttam, hogy a gcc-t a -D_FILE_OFFSET_BITS=64 definícióval kényszeríteni lehet arra, hogy alapból 64 bites offszeteket használjon.