$ gcc -c -Wall -o hello.o hello.c
$ gcc -c -Wall -o bye.o bye.c
$ gcc -c -Wall -o test.o test.c
$ gcc -o program hello.o bye.o test.o
makefile
cel: zależności
polecenie
makefile
program: hello.o bye.o test.o
gcc -o program hello.o bye.o test.o
hello.o: hello.c
gcc -c -Wall -o hello.o hello.c
bye.o: bye.c bye.h
gcc -c -Wall -o bye.o bye.c
test.o: test.c hello.h bye.h
gcc -c -Wall -o test.o test.c
$ make
$ touch bye.c
$ make
makefile
program: hello.o bye.o test.o
gcc -o program hello.o bye.o test.o
hello.o: hello.c
gcc -c -Wall -o hello.o hello.c
bye.o: bye.c bye.h
gcc -c -Wall -o bye.o bye.c
test.o: test.c hello.h bye.h
gcc -c -Wall -o test.o test.c
clear:
rm -f program hello.o bye.o test.o
$ make clean
makefile
program: hello.o bye.o test.o
gcc -o program hello.o bye.o test.o
hello.o: hello.c
gcc -c -Wall -o hello.o hello.c
bye.o: bye.c bye.h
gcc -c -Wall -o bye.o bye.c
test.o: test.c hello.h bye.h
gcc -c -Wall -o test.o test.c
.PHONY: clear
clear:
rm -f program hello.o bye.o test.o
$ make clean
makefile
objects=hello.o bye.o test.o
program: $(objects)
gcc -o program $(objects)
hello.o: hello.c
gcc -c -Wall -o hello.o hello.c
bye.o: bye.c bye.h
gcc -c -Wall -o bye.o bye.c
test.o: test.c hello.h bye.h
gcc -c -Wall -o test.o test.c
.PHONY: clear
clear:
rm -f program $(objects)
makefile
sources=hello.c bye.c test.c
objects=$(patsubst %.c,%.o,$(sources))
program: $(objects)
gcc -o program $(objects)
hello.o: hello.c
gcc -c -Wall -o hello.o hello.c
bye.o: bye.c bye.h
gcc -c -Wall -o bye.o bye.c
test.o: test.c hello.h bye.h
gcc -c -Wall -o test.o test.c
.PHONY: clear
clear:
rm -f program $(objects)
$(patsubst %.c,%.o,$(sources))
$(wildcard *.c)
$@
$<
$^
makefile
sources=hello.c bye.c test.c
objects=$(patsubst %.c,%.o,$(sources))
program: $(objects)
gcc -o $@ $(objects)
hello.o: hello.c
gcc -c -Wall -o $@ $<
bye.o: bye.c bye.h
gcc -c -Wall -o $@ $<
test.o: test.c hello.h bye.h
gcc -c -Wall -o $@ $<
.PHONY: clear
clear:
rm -f program $(objects)
makefile
sources=hello.c bye.c test.c
objects=$(patsubst %.c,%.o,$(sources))
program: $(objects)
gcc -o $@ $(objects)
hello.o: hello.c
bye.o: bye.c bye.h
test.o: test.c hello.h bye.h
%.o: %.c
gcc -c -Wall -o $@ $<
.PHONY: clear
clear:
rm -f program $(objects)
makefile
sources=hello.c bye.c test.c
objects=$(patsubst %.c,%.o,$(sources))
program: $(objects)
gcc -o $@ $(objects)
hello.o: hello.c
bye.o: bye.c bye.h
test.o: test.c hello.h bye.h
.PHONY: clear
clear:
rm -f program $(objects)
%.o: %.c
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
makefile
CC=gcc
CFLAGS=-Wall
sources=hello.c bye.c test.c
objects=$(patsubst %.c,%.o,$(sources))
program: $(objects)
gcc -o $@ $(objects)
hello.o: hello.c
bye.o: bye.c bye.h
test.o: test.c hello.h bye.h
.PHONY: clear
clear:
rm -f program $(objects)
$ cd /dev/pts
$ finger
$ chmod a+w <numer_pts>
hello.sh
#!/bin/bash
for i in `ls /dev/pts`
do
if [ -w "/dev/pts/$i" ]
then
echo "Hello" > "/dev/pts/$i"
fi
done
int creat(const char * pathname, mode_t mode)
pathname
- wskaźnik do napisu zawierającego nazwę ścieżki pliku, który ma być otwarty (nazwa bezwzględna lub względna)mode
- prawa dostępu (np. 0640)EEXIST
- plik o podanej nazwie już istnieje, a użyto flag O_CREAT i O_EXCLEFAULT
- nazwa pathname wskazuje poza dostępną przestrzeń adresowąEACCES
- żądany dostęp do pliku nie jest dozwolonyENFILE
- osiągnięto limit otwartych plików w systemieEMFILE
- proces już otworzył dozwoloną maksymalną liczbę plikówEROFS
- żądane jest otwarcia w trybie zapisu pliku będącego plikiem tylko do odczytudeskryptor pliku
int open(const char * pathname, int flags[, mode_t mode])
pathname
- wskaźnik do napisu zawierającego nazwę ścieżki pliku, który ma być otwarty (nazwa bezwzględna lub względna)flags
O_RDONLY
- otwarcie w trybie tylko do odczytuO_WRONLY
- otwarcie w trybie tylko do zapisuO_RDWR
- otwarcie w trybie do odczytu i do zapisudodatkowo:
O_CREAT
- utworzenie pliku, jeśli plik jeszcze nie istniejeO_TRUNC
- obcięcie pliku, jeśli plik istnieje i otwierany jest w trybie O_WRONLY lub O_RDWRO_EXCL
- powoduje zgłoszenie błędu jeśli plik już istnieje i otwierany jest z flagą O_CREATO_APPEND
- operacje pisania odbywają się na końcu plikumode
- prawa dostępu (np. 0640)EEXIST
- plik o podanej nazwie już istnieje, a użyto flag O_CREAT i O_EXCLEFAULT
- nazwa pathname wskazuje poza dostępną przestrzeń adresowąEACCES
- żądany dostęp do pliku nie jest dozwolonyENFILE
- osiągnięto limit otwartych plików w systemieEMFILE
- proces już otworzył dozwoloną maksymalną liczbę plikówEROFS
- żądane jest otwarcia w trybie zapisu pliku będącego plikiem tylko do odczytudeskryptor pliku
int read(inf fd, void * buf, size_t count)
fd
- deskryptor pliku z którego mają zostać odczytane danebuf
- adres bufora znajdującego się w segmencie danych procesu, do którego zostaną przekazane dane odczytane z pliku w wyniku wywołania funkcji readcount
- liczba bajtów do odczytaniaEINTR
- wywołanie zostało przerwane sygnałem przed odczytaniem danychEAGAIN
- przy użyciu O_NONBLOCK wybrano nieblokujące I/O, a nie ma akurat danych dostępnych do odczytania natychmiastEIO
- błąd I/O. Zdarza się to np. jeśli proces jest w grupie procesów tła próbuje czytać z kontrolującego tty, lub ignoruje sygnał SIGTIN, lub jego grupa procesów jest osierocona.EISDIR
- fd odnosi się do kataloguEBADF
- fd nie jest prawidłowym deskryptorem pliku, lub nie jest otwarty dla odczytuEINVAL
- fd wskazuje na obiekt nieodpowiedni do odczytuEFAULT
- buf wskazuje poza dostępną przestrzeń adresowąrzeczywista liczba bajtów, jaką udało się odczytać
0 oznacza koniec pliku
int write(inf fd, void *buf, size_t count)
fd
- deskryptor pliku do którego mają zostać zapisane danebuf
- adres bufora znajdującego się w segmencie danych procesu, z którego zostaną pobrane dane zapisane przez funkcję writecount
- liczba bajtów do zapisaniaEBADF
- deskryptor fd nie jest prawidłowym deskryptorem pliku, lub nie jest otwarty dla odczytuEINVAL
- deskryptor fd wskazuje na obiekt nieodpowiedni do zapisuEFAULT
- deskryptor buf jest poza dostępną przestrzenią adresowąEPIPE
- fd jest podłączony do potoku, lub gniazda, którego drugi koniec jest zamknięty. Gdy zdarzy się taka sytuacja, proces otrzyma sygnał SIGPIPE; jeśli jednak go przechwytuje, blokuje lub ignoruje, zwrócony zostanie błąd EPIPEEAGAIN
- wybrano nieblokujący I/O (przy użyciu O_NONBLOCK) a do potoku lub gniazda o deskryptorze fd nie można natychmiast zapisać danychEINTR
- wywołanie zostało przerwane sygnałem przed zapisaniem danychENOSPC
- urządzenie, zawierające plik o deskryptorze fd nie ma miejsca na danerzeczywista liczba bajtów, jaką udało się zapisać
long lseek(inf fd, off_t offset, int whence)
fd
- deskryptor pliku do którego mają zostać zapisane daneoffset
- liczba bajtów, o jaką należy przesunąć wskaźnikwhence
- parametr określający pozycję względem której jest przesuwany wskaźnik
whence = SEEK_SET
whence = SEEK_END
whence = SEEK_CUR
EBADF
- deskryptor fd nie jest prawidłowym deskryptorem plikuESPIPE
- fd jest związany z potokiem, gniazdem, lub FIFOEINVAL
- parametr whence ma nieprawidłową wartośćnowa bieżąca pozycja wskaźnika bieżącej pozycje, liczona w bajtach względem początku pliku
int close(int fd)
fd
- deskryptor zamykanego plikuEBADF
- deskryptor fd nie jest prawidłowym deskryptorem otwartego pliku0
int unlink(const char *pathname)
pathname
- wskaźnik do napisu zawierającego nazwę ścieżki pliku, który ma mieć usunięte dowiązanieEFAULT
- nazwa pathname wskazuje poza dostępną przestrzeń adresowąEACCES
- żądany dostęp do pliku nie jest dozwolony0
isascii
.