stdin, stdout, stderr

SZIGETI Szabolcs szigi at ik.bme.hu
Tue Apr 19 15:03:21 CEST 2005


Hali!


>>
>> Legyunk pontosak: az integeres file handle, az nem C specifikus, hanem
> Unix
>
> Nem ANSI C specifikus?!
> Bevettek a szabvanyba tudtommal...

Lehetseges, nem tudom. De az biztos, hogy Unix eredetu volt. Az sdtio-t meg 
azert talaltak ki, hogy nem unixon islegyen szabvany C io konyvtar, olyan 
gepen is, ahol akar nincs is byte-folyam jellegu IO.


>
>> Alapvetoen egeszsegtelen dolog az stdio es az oprendszer szintu
> fajlekezelo
>> eljarasokat keverni, mert rengeteg buktato van benne. Ha van rendes stdio
>> implementaciod, akkor hasznald kizarolag azt. Ha nincs, akkor marad az
>> oprendszer szint.
>
> ? nemertem.

Ugy ertem, a sima read/write/open/close.

>
> Epp az van hogy nincs oprendszer (ez egy microcontrolller) es en akarom
> megirni a filekezelest.
> De nemtom hogy az oprendszerben hogyan irjak meg.
> Azaz a FILE strukturabol+stream-bol hogy lesz tenyleges file?!

Amikor fopen-nel megynitsz egy filet, akkor az stdio konyvtar meghivja az 
alatta levo open-t. Es elrakja a FILE-ban a descriptort. Egyes 
implementaciok a fileno(FILE*) hivassal meg tudjak mondani, hogy melyik az. 
De hivatalosan a FILE* alral mutatott strukturanak a belso felepiteset nem 
lenne "szabad" ismerni, mert az nem garantaltan hordozhato.

> Pl az fopen parancs hatasara letrejon a file.
> Van valami flag a strukturaban ami jezi hogy most jott letre, es mondjuk
q> megcsinalhatom hozza a FAT bejegyzest, majd torolhetem a flag-et.
> Aztan szepen lehet irogatni, es az fclose-nal pedig lezarni, es voila kesz 
> a
> file.


Az stdio az egy folsobb szintu reteg. Az alatta levo rendszerhivasokra epul. 
Tehat meghivod az fopen-t, az pedig meg fogja hivni az open-t, vagy akarmi 
is van alatta. Vagy letrehozol valahogy egy filedescrptort, es fdopen-nel 
csinalsz belole egy FILE-t.


> Tovabba honnan tudom hogy a mondjuk 5-os handle-hoz melyik file struktura
> tartozik?

Egyatalan nem biztos, hogy tartozik hozza! A legtobb megvalositasban a FILE 
dolgai  sima konyvtari fuggvenyek, amely hozza vannak linkelve az 
alkalmazashoz. Az stdion/out/err-nek csak azert van, mert a main meghivasa 
elott inicializalo kod letrehozza oket. A tudtodon kivul mas FILE nem johet 
letre. De hamegvan a handle-d, akkor vagy kezeled azt direktben 
read/write-tal, vagy, ahogy mondtam, fdopennel csinalsz hozza FILE-t.

Szabolcs




More information about the Elektro mailing list