stdin, stdout, stderr
Andras Tantos
andras_tantos at yahoo.com
Mon Apr 18 17:08:11 CEST 2005
Hali!
A C-ben ket fele fajlkezeles van. Az egyik file handle-el mukodik. Ezeken
mukodnek az open, close, stb. fugvenyek. A 'handle' valoban egy integer, es
elvben az open adja vissza oket. Minden megnyitott fajlnak egyedi handle-je
van, azonban a std. I/O-nak elore lefoglalt, speci handle-t adtak:
0 - STDIN
1 - STDOUT
2 - STDERR
3 - STDAUX (?)
Van egy masik tipusu fajlkezeles, amelyik FILE* struktura pointer-eket
hasznal. Ez a tipusu kezeles az, amelyiket az fopen, fclose, stb., tehat az
'f' kezdetuek ismernek. Itt a FILE valoban egy struktura. Ezekbol is van par
elore defnialt: stdin, stout, stderr, stdaux. A FILE*-on operalo fuggvenyek
altalaban elobb-utobb visszahivjak a file-handlet kezeloket, ezert is van a
FILE strukturaban egy handle. Amit hozza szoktak rakni, az pl. a buffereles.
A te uC-den a megvalositas elegge primitvnek tunik: csak az elso harom std.
handle-t kezeli. Azaz nincs valodi fajlrendszer, es (gondolom) a fuggvenyek
csupan a soros port kezeleset csomagoljak egy a szabvanyhoz kicsit kozelebb
allo formaba.
Osszefoglalva: fopen, fclose, open, close, fseek, fpos, ungetc - felejtsd
el, nem fognak mukodni.
putc, getc, putch, fprintf, fscanf - ezek menni fognak, de csak akkor, ha a
harom elore definialt handle (stdin, stdout, stderr) valamelyiket hasznalod.
Udv,
Tantos Andras
p.s.: mindez termeszetesen szabvany C, es nem linux/windows specifikus.
Barmelyik OS alatt lehet igy fajlokat kezelni.
----- Original Message -----
From: "Fuzesi Arnold" <arno at externet.hu>
To: <elektro at tesla.hu>; <retro at lists.tmp.hu>; <avr-hun at x-dsl.hu>
Sent: Monday, April 18, 2005 4:29 AM
Subject: stdin, stdout, stderr
> Sziasztok!
>
> Rászánnám magam, hogy a konyvtari stdio muveletekkel kezeljek file-t uC-n.
> (fopen, fclose, fseek,fpos, stb.)
>
> De lassan haladok elore. :(
> Makro hegyek vannak definialva a h file-okban, es kicsit atlathatatlan
> szamomra. Leginkabb azert mert nem ismerem az alap filozofiajat az stdio
> kezelesnek.
>
> ---
>
>
> A legutolso elemi fuggveny megkapja a "handle" nevu integert , illetve a
> byte-ot amit a bufferba kell tenni.
>
> int (__writechar)(int Handle, unsigned char c)
> {
> if (Handle == 1 || Handle == 2)
> return __putchar(c); //__putchar az altalam definialt
> fuggveny amelyik tenylegesen kiirja az adott byte-ot.
> else
> return -1;
> }
>
> A handle az stdin, stdout, stderr, stb azonositoja lenne?
>
>
>
>
> --
>
>
>
> Talaltam egy ilyet:
> extern FILE *stdin, *stdout, *stderr; /*struct _FILET _Stdin, _Stdout,
> _Stderr; */
>
> Azaz egy kulso FILE tipusu pointerek az emlitett stream-ek.
> De a FILE tipus deklaraciojat egyszeruen nem talalom.
>
> Viszont gyanitom ebbol szarmazik:
>
> /* FILE structure for library with buffered IO. Moved here from stdio.h */
> typedef struct __Filet_BIO
> {
> unsigned short _Mode;
> short _Handle;
> unsigned char *_Buf,
> *_Bend,
> *_Next;
> unsigned char *_Rend,
> *_Wend,
> *_Rback;
> _Wchart *_WRback,
> _WBack[2];
> unsigned char *_Rsave,
> *_WRend,
> *_WWend;
> struct _Mbstatet _Wstate;
> char *_Tmpnam;
> unsigned char _Back[2],
> _Cbuf;
> } _Filet_BIO;
>
> /* FILE structure for library without buffered IO. */
> typedef struct __Filet_NBIO
> {
> struct __Filet_NBIO *_Next;
> unsigned short _Mode;
> short _Handle;
> union
> {
> int _UnputBuf;
> _Wchart _WUnputBuf;
> };
> char *_Tmpnam;
> #ifndef __NO_MULTIBYTE
> struct _Mbstatet _Wstate;
> #endif /* __NO_MULTIBYTE */
> } _Filet_NBIO;
> /* declarations */
>
> Valakinek ismeros ez? :)
> Emleget POSIX szabvanybeli dolgokat a forras, elvben az kene legyen...
>
> Ez lenne maga a FILE tipus?
>
> Valaki aki "vágja" ezt a temat legyszi irjon mar 1-2 mondatot errol az
> stdio-s tortenetrol.
> Linux-os programozo kollegaknak gondolom csipobol megy....
>
>
> Ezer koszonet,
> Arnold
>
>
> _______________________________________________
> Avr-hun mailing list
> Avr-hun at x-dsl.hu
> http://www.x-dsl.hu/cgi-bin/mailman/listinfo/avr-hun
>
More information about the Elektro
mailing list