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