ANSI C 7

ANSI C 7



7 WEJŚCIE I WYJŚCIE


^ OBSŁUGA BŁĘDÓW - PLIK STDERR I FUNKCJA EXIT


Funkcje getchar i putchar można zdefiniować jako makra za pomocą nazw getc /* filecopy: kopiuj zawartość pliku ifp do pliku ofp */ putc, stdin oraz stdout:

#define getchar() ęjetc(stdin)

#define putchar(c) putc((c), stdout)


powered by

Mi si ol


Przy formatowanym czytaniu z plików i pisaniu do plików możemy korzystać z fun^ cji fscanf i fprintf. Działają one identycznie jak scanf i printf z jednym wyjątkiem ich pierwszym argumentem jest wskaźnik do obsługiwanego pliku; format jest drugim argumentem.


void filecopy(FILE *ifp, FILE *ofp)

{

int c;

while ((c = getc(ifp)) != EOF) putc(c, ofp);


int fscanf(FILE *fp, char *format, ...) int fprintf(FILE *fp, char *format,...)


Wskaźniki plików stdin i stdout są obiektami typu FILE *. Są jednak stałymi, a nie siennymi, przypisywanie im czegokolwiek jest więc niemożliwe.


|i funkcja

Z tym bagażem wiedzy możemy już napisać program cat służący do sklejania zawar- ■ int fclose(FILE *fp^

tości plików. Przyjmiemy jedno założenie, które zresztą przydaje się też w innych siała odwrotnie niż fopen - zrywa połączenie ustalone przez fopen między wskaź-programach: jeżeli w wierszu polecenia wywołującego program podano argumenty, to akiem pliku a nazwą zewnętrzną, zwalniając wskaźnik dla innego pliku. Większość będą one interpretowane jako nazwy plików i obsługiwane w kolejności wystąpienia, Sternów operacyjnych nakłada ograniczenia na liczbę jednocześnie otwartych pli-


Jeżeli argumentów nie podano, to obsługuje się standardowe wejście. #include <stdio.h>

I* cat: sklej zawartość plików, wersja 1 */ main(int argc, char *argv[ ])

{

FILE *fp;

void filecopy(FILE *, FILE *);

if (argc == 1) /* bez argumentów; kopiuj std. wejście */ filecopy(stdin, stdout); else

while (—argc > 0)

if ((fp = fopen(*++argv, ”r”)) == NULL) {

printf(”cat: nie mogę otworzyć %s\n", *argv); return 1;

} else {

filecopy(fp, stdout); fclose(fp);

}

return 0;

}



F iiSw w jednym programie, dobrym pomysłem jest więc zwalnianie wskaźników pli-ijw, jak w programie cat, gdy nie są już dłużej potrzebne. Istnieje także drugi powód, iby zamykać pliki wyjściowe - funkcja fclose opróżnia bufor, w którym putc gromada dane wyjściowe. Funkcja fclose jest wywoływana automatycznie dla wszytkich szcze otwartych plików, gdy program kończy się normalnie. (Możesz zamknąć stan-iardowe pliki stdin i stdout, jeśli nie są Ci potrzebne. Można je także przełączyć za ;omocą bibliotecznej funkcji freopen.)



Obsługa błędów - plik stderr i funkcja exit

Usługa błędów w programie cat nie jest idealna. Kłopot polega na tym, że jeże-'1 jakiegoś powodu jeden z plików nie jest dostępny, to odpowiedni komunikat zo-;tanie dopisany na koniec sklejanego tekstu wyjściowego. Można to ewentualnie żartować wówczas, gdy wyniki są kierowane na ekran, nie można natomiast wtedy, przesyła się je do innego pliku lub potokiem do innego programu.

%śmy mogli sobie lepiej radzić z takimi sytuacjami, mamy drugi strumień danych Ujściowych, o nazwie stderr, przydzielony programowi w ten sam sposób, jak stratnie stdin i stdout. Dane kierowane do pliku stderr zwykle pojawiają się na ek-nawet wtedy, kiedy standardowe wyjście jest skierowane gdzie indziej.

jtrawmy więc program cat tak, by swoje komunikaty o błędach wypisywał do stanowego pliku błędów.


216


217



Wyszukiwarka

Podobne podstrony:
ANSI C 1 7 WEJŚCIE I WYJŚCIE Najprostszym mechanizmem wejścia jest czytanie po jednym znaku ze sta
ANSI C 2 7 WEJŚCIE I WYJŚCIE_______- kretnej maszynie, programom z nich korzystającym oszczędzono
ANSI C 3 7 WEJŚCIE I WYJŚCIE ____ ________ printf(s);    /* ŹLE, jeśli w s występuj
ANSI C 5 7 WEJŚCIE I WYJŚCIE______ tabulacji, znak nowego wiersza, znak powrotu karetki, znak tabu
ANSI C 6 7 WEJŚCIE I WYJŚCIE_______ Ćwiczenie 7.5. Napisz na nowo program kalkulatora przyrostkowe
ANSI C 8 7 WEJŚCIE I WYJŚCIE #include <stdio.h> /* cat: sklej zawartość plików, wersja 2 */
ANSI C 9 7 WEJŚCIE I WYJŚCIE Aby wykazać, że nie ma nic magicznego w takich funkcjach, jak fgets i
ANSI C 0 7 WEJŚCIE I WYJŚCIE 7.8.2 Badanie klasy znaków i ich przekształcenia Wiele funkcji ze sta
ANSI C 1 7 WEJŚCIE I WYJŚCIE W punkcie 8.7 pokażemy taką realizację dystrybutora pamięci podobnego
§7 1.    Do administracyjnej obsługi procesu dydaktycznego, w uczelni funkcjonuje
image041 •3 Własna obsługa błędów - Microsoft Internet Explorer E Wxl J Plik Edycja Widok
60078 p1020870 (2) Wejście-wyjście sterowane przerwaniami (2) 3$ Obsługa np. urządzenia wejścio
067 Mianem operandu określa się wejścia, wyjścia, liczniki i inne funkcje sterownika. Zgodnie z rys
Operacje wejścia-wyjścia Do obsługi fizycznych zbiorów danych w programie paskalowym stosuje się , k

więcej podobnych podstron