fluxuri standard de

În ceea ce privește fișierul de limbă cu sistemul de la începutul programului se va deschide automat cele trei fluxuri. Acesta stdin (fluxul de intrare standard), stdout (iesirea standard), și stderr (eroare standard). De obicei, aceste fluxuri sunt direcționate către consola, ci în medii care susțin redirecționarea I / O, pot fi redirecționate către un alt sistem de operare al dispozitivului. (I / O redirecționare este susținută, de exemplu, sisteme de operare, cum ar fi Windows, DOS, UNIX și OS / 2).

Deoarece fluxurile standard sunt indicii la dosar, ei pot folosi limbajul sistemului I / O, cu și pentru a efectua operatiile I / O pe consolă. De exemplu, putchar () poate fi definită după cum urmează:

În general vorbind, stdin este folosit pentru a citi din consola, un stdout și stderr - înregistrarea consolei.

În rolul de indicii STDIN fișier de flux. stdout și stderr pot fi folosite în orice funcție în cazul în care variabila de tip FILE * utilizat. De exemplu, putem scrie despre un apel fgets () pentru intrare de la linia de consolă.

Și într-adevăr, astfel de fgets utilizare () poate fi destul de util. Așa cum sa discutat în această carte, prin utilizarea devine () nu exclude posibilitatea ca matrice care este utilizat pentru a primi intrări de utilizator de caractere care urmează să fie ambalate. Acest lucru este posibil deoarece grabita () nu verifică absența încălcării de frontieră. O alternativă utilă devine () este fgets () funcția cu stdin argumentul. deoarece această funcție poate limita numărul de caractere citite, și astfel să evite un exces de matrice. Singura problema cu fgets (). Este că nu înlătură caracterul NEWLINE (în timp ce devine () șterge!), Deci trebuie să fie eliminate „de mână“, așa cum se arată în următorul program:

El uită că stdin. stdout și stderr - acest lucru nu este variabilele în sensul normal, și este imposibil de a atribui o valoare folosind fopen (). Mai mult decât atât, tocmai pentru că aceste fișiere indicatoare sunt create în mod automat la începutul programului, acestea sunt închise automat la terminarea lucrului. Așa că nu încercați să le închidă.

Comunicarea cu consola I / O

În consola C și de intrare fișier / ieșire nu este prea diferit unul de altul. Funcțiile consola I / O, așa cum este descris în capitolul 8. de fapt, trimite rezultatele operațiunilor sale pe un singur fir - stdin și stdout. și, de fapt, fiecare dintre ele este o versiune specială a funcției de fișier corespunzător. Funcțiile consolei I / O să existe, a fost convenabil pentru programator este.

Așa cum sa discutat în secțiunea anterioară, consola de intrare / ieșire poate fi realizată folosind orice funcție de limbă fișier C, cu toate acestea, ar putea să fie o surpriză, care este, operații de I / O pe fișierul disc poate fi realizată prin intermediul consolei I / funcții O, de exemplu, , printf (). Faptul că toate funcțiile consolei I / O, care sunt discutate în Capitolul 8. efectuează tranzacțiile lor cu fluxuri de stdin și stdout. În mediile de susținere I / O redirecționare, este echivalent cu stdin și stdout poate fi redirecționat către o altă persoană decât o tastatură sau ecranul dispozitivului. Luați în considerare, de exemplu, programul următor:

Să presupunem că acest program numit TEST. Atunci când se efectuează vârful normal afișat, apoi se citește șirul introdus de la tastatură, și în cele din urmă, este afișat acest șir. Cu toate acestea, în medii care susțin I / O redirecționare, una sau stdin stdout flux (sau ambele) pot fi redirecționate către un fișier. De exemplu, în DOS sau Windows mediu următor rula TEST

Aceasta conduce la concluzia că acest program va fi scris într-un fișier numit IEȘIRE. Un test de comandă următoare

direcționează fluxul stdin într-un fișier numit INPUT, iar iesirea standard - un fișier numit IEȘIRE.

În cazul în care programul-C este terminată, toate fluxurile redirecționat înapoi către statele, care au fost instalate în mod implicit.

Redirecționarea fluxuri standard: funcția freopen ()

Pentru a redirecționa standard stream puteți utiliza freopen (). Această caracteristică se conectează fluxul existent cu un nou fișier. Deci, poate fi bine asociat cu noul fișier și ieșirea standard. Aici este prototipul acestei funcții:

unde filename - un pointer la numele fișierului pe care doriți să o asociați cu fluxul indicat de un pointer la flux. Fișierul se deschide în modul de funcționare; Acest parametru poate lua aceleași valori ca și parametrul corespunzător al fopen funcției (). Dacă funcția freopen () este de succes, returnează un flux. și dacă te întâlnești eroare - atunci NULL.

Programul următor ilustrează utilizarea funcției freopen () pentru a redirecționa standard stdout flux de ieșire într-un fișier numit de ieșire.

articole similare