ANSI C 3

ANSI C 3



8 ŚRODOWISKO SYSTEMU UNIX -_-_----

BUFSIZ liczbę bajtów, które mają być wypisane przez write: następne po tym wywołanie read zwróci wartość zero.

Warto zobaczyć, jak za pomocą funkcji read i write można zbudować funkcje wyższego poziomu, jak getchar, putchar itp. Przykładowo prezentiljemy wersję funkcji get-char, która czyta z wejścia bez buforowania danych, to znaczy po jednym znaku na raz.

#include "syscalls.h"

/* getchar: wejście jednoznakowe niebuforowane */ int getchar(void)

{

char c;

return (read(0, &c, 1) == 1) ? (unsigned char) c : EOF;

}

Zmienna c musi być typu char. ponieważ funkcja read akceptuje jedynie wskaźniki do znaków. Rzutowanie c do typu unsigned char w instrukcji return eliminuje jakiekolwiek problemy związane z powielaniem bitu znaku.

W drugiej wersji funkcja getchar wczytuje dane wielkimi porcjami, a oddaje każdorazowo po jednym znaku.

#include "syscalls.h”

/* getchar: prosta wersja buforująca */ int getchar(void)

{

static char buf[BUFSIZ]; static char *bufp = buf; static int n = 0;

if (n == 0) { I* bufor jest pusty */ n = read(0, buf, sizeof buf); bufp = buf;

}

return (--n >= 0) ? (unsigned char) *bufp++ : EOF;

}

Jeśli tę wersję funkcji getchar chciałbyś przetłumaczyć z dołączonym nagłówkiem <stdio.h>, to gdy standardową wersję getchar zrealizowano jako makro, wówczas jego definicję należy odwołać za pomocą #undef.

8.3 FUNKCJE OPEN, CREAT, CLOSE, UNLINK



I Funkcje open, creat, close, unlink



Pliki inne niż standardowe wejście, standardowe wyjście i standardowe wyjście błędów muszą być jawnie otwarte, zanim zaczniesz z nich czytać lub do nich pisać. Do tego celu służą dwa odwołania systemowe open i creat (sic! - od ang. create - utwórz).

Funkcja open przypomina omówioną w rozdz. 7 funkcję fopen, zamiast wskaźnika do pliku zwraca jednak deskryptor pliku (deskryptor jest typu int). W przypadku błędu open zwraca —1.    /

#include <fcntl.h> int fd;

int open(char *name, int flags, int perms); fd = open(name, flags, perms);

Podobnie jak w funkcji fopen. argument name jest ciągiem znaków zawierającym nazwę pliku. Drugi argument, flags, jest liczbą typu int, określającą sposób otwarcia wskazanego pliku. Jego najważniejszymi wartościami są:

O.RDONLY otwarcie tylko do pisania

CLWRONLY otwarcie tylko do czytania

0_RDWR otwarcie zarówno do czytania, jak i pisania

Te stałe zdefiniowano w nagłówku <fcntl.h> dla rodziny systemów Unix System V oraz w nagłówku <sys/file.h> dla systemów Unix w wersji Berkeley (BSD).

Aby otworzyć już istniejący plik do czytania, należy na przykład napisać

fd = open(name, 0_RD0NLY, 0);

W omawianych przez nas przykładach otwarć plików trzeci argument, perms, zawsze będzie równy zero.

Próba otwarcia pliku, który nie istnieje, jest błędem. Do tworzenia nowego pliku lub do zapisania na nowo już istniejącego służy odwołanie systemowe creat.

int creat(char *name, int perms); fd = creat(name, perms);

229


Wyszukiwarka

Podobne podstrony:
ANSI C 3 8 ŚRODOWISKO SYSTEMU UNIX___________ Funkcja morecore otrzymuje pamięć od systemu operacy
ANSI C 4 8 ŚRODOWISKO SYSTEMU UNIX_________ Funkcja creat zwraca deskryptor pliku, jeśli mogła utw
ANSI C 5 8 ŚRODOWISKO SYSTEMU UNIX _Z-----8.4    
ANSI C 6 8 ŚRODOWISKO SYSTEMU UNIX #define stdin    (&_iob[0]) #define stdout
ANSI C 8 8 ŚRODOWISKO SYSTEMU UNIX , 6 PRZYKŁAD - WYPISYWANIE ZAWARTOŚCI SKOROWIDZÓW_ 1 Zilustruje
ANSI C 9 8 ŚRODOWISKO SYSTEMU UNIX_________ Teraz jesteśmy już gotowi do napisania programu fsize.
ANSI C 0 8 ŚRODOWISKO SYSTEMU UNIX Każde wywołanie funkcji readdir zwraca wskaźnik do informacji o
ANSI C 1 8 ŚRODOWISKO SYSTEMU UNIX_______ while (read(dp->fd, (char *) &dirbuf, sizeof(dirb
ANSI C 4 8 ŚRODOWISKO SYSTEMU UNIX___ Napisz funkcję calloc, korzystając z wywołań malloc lub trak
ANSI C 7 powered by Mi si ol 8 ŚRODOWISKO SYSTEMU UNIX______J kodu. W szczególności nasza funkcja
rodzajów wyodrębnić można pewną liczbę gatunków, które traktowane być muszą osobno. Tak więc w obręb
D2 (4) 5 (2 pkt.) Podaj liczbę procesów potomnych, które zostaną utworzone w systemie UNIX przez nas
d2 2 5 (2 pkt.) Podaj liczbę procesów potomnych, które zostaną utworzone w systemie UNIX przez nastę
kilka wersji UNIX (System III oraz System V) w celu konsolidacji środowisk rozwijających UNIX na poz
img005 Powyższe zlecenia można lakże zrealizować jednym poleceniem: export SYSTEM=Unix Każdy użytkow
Operacje na plikach Tryb konsolowy w systemie UNIX Praca w powłoce PodsumowanieTworzenie katalogu o

więcej podobnych podstron