W tym repozytorium znajdują się m.in. porady na laby z sopów. To repo nie zastępuje tutoriala, materiałów z dysku i dokumentacji. Zachęcam do tworzenia issues i pull requestów.
Pliki:
zad*.c
- Rozwiązania zadań z tutoriala.lab*.c
- Rozwiązania zadań z laboratoriów.szablon*.c
- Szablony
Można je traktować jako checklistę przed wysłaniem rozwiązania.
- Pisz
if (1 == x)
zamiastif (x == 1)
- Do wypisywania błędów używaj makro
#define ERR(source) (perror(source),\
fprintf(stderr,"%s:%d\n",__FILE__,__LINE__),\
exit(EXIT_FAILURE))
- Zawsze sprawdzaj zwracane wartości funkcji systemowych, np.
if (closedir(dir))
ERR("closedir")
- Niektóre funkcje informują o błędzie, ustawiając zmienną
errno
. - Kończ
fprintf
iprintf
znakiem nowej linii\n
. - Inicjalizuj zmienne. Nie jesteśmy w latach 70. i to dużo nie kosztuje.
- Nie używaj tzw. magic numbers. Zamiast pisać
malloc(4)
piszmalloc(sizeof(int))
- Zwalniaj zasoby, jak katalogi, pliki, deskryptory.
- wciśnięcie
<C-/>
powoduje (za|od)komentowanie zaznaczonych linii.
ale + coc + ccls
d
iu
szybkie poruszanie w dół i w górę/str
wyszukiwanie wzorcastr
w tekścien
iN
przejście do następnego i poprzedniego wyniku wyszukiwania- Wywołanie z parametrem
-k arg
przeszukuje manpage dotyczącearg
. Super przydatne, gdy nie wiemy nawet gdzie szukać. - Flaga
-a
, gdy nie wiemy, która sekcja. - Korzystaj ze stron POSIX-owych:
man 3p printf
zamiastman 3 printf
- Warto zwrócić uwagę na sekcje
EXAMPLES
iSEE ALSO
- Więcej sztuczek, gdy wciśniemy
h
i oczywiście w komendzieman man
:)
Polecam gdbgui.
Pozwala śledzić wywołania funkcji systemowych i sygnały. Więcej w man strace
.
- odczyt i zapis na zasadzie first-in-first-out
- łącze jest jednokierunkowe
- FIFO jest widoczne w systemie plików, a pipe nie
PIPE_BUF
oznacza maksymalną wielkość bufora łączafork
oczywiście przekazuje do dziecka łącze utworzone przez rodzica
#include <unistd.h>
- tworzy jednokierunkowe nienazwane łącze
- czytamy z
fildes[0]
zwykle funkcjąread
- piszemy do
fildes[1]
zwykle funkcjąwrite
- zwraca
0
, jeśli się powiedzie - zwraca
-1
i ustawiaerrno
w przeciwnym wypadku
- zamyka łącze
#include <sys/stat.h>
- tworzy FIFO w systemie plików
const char *path
to ścieżkamode_t
to prawa dostępu- zwraca
0
, jeśli się powiedzie - zwraca
-1
i ustawiaerrno
w przeciwnym wypadku
- otwiera kolejkę
path
p w trybieoflag
- domyślnie operacje otwarcia są blokujące
- wywołanie z flagą
O_NONBLOCK
jest nieblokujące
- usuwa FIFO z systemu
- glibc
- POSIX
- Michael Kerrisk - "Linux Programming Interface" łatwo dostępna książka, w której wszystko jest szczegółowo opisane, są tam przykładowe programy, helpery itp.