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
fprintfiprintfznakiem 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
diuszybkie poruszanie w dół i w górę/strwyszukiwanie wzorcastrw tekścieniNprzejście do następnego i poprzedniego wyniku wyszukiwania- Wywołanie z parametrem
-k argprzeszukuje 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 printfzamiastman 3 printf - Warto zwrócić uwagę na sekcje
EXAMPLESiSEE ALSO - Więcej sztuczek, gdy wciśniemy
hi 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_BUFoznacza maksymalną wielkość bufora łączaforkoczywiś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
-1i ustawiaerrnow przeciwnym wypadku
- zamyka łącze
#include <sys/stat.h>
- tworzy FIFO w systemie plików
const char *pathto ścieżkamode_tto prawa dostępu- zwraca
0, jeśli się powiedzie - zwraca
-1i ustawiaerrnow przeciwnym wypadku
- otwiera kolejkę
pathp w trybieoflag - domyślnie operacje otwarcia są blokujące
- wywołanie z flagą
O_NONBLOCKjest 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.