Přestože je sériový port blokové zařízení, které je v OS reprezentované souborem v adresáři /dev/
a lze s ním tak pracovat jako s běžným souborem funkcemi ze standardní knihovny např. fopen()
nebo fwrite()
, je z důvodu přímého přístup výhodnější využít funkce systémové knihovny jako jsou open()
, close()
, read()
a write()
. Tyto funkce nepracují s ukazatelem na strukturu FILE*
, ale přímo s tzv. file deskriptorem, který je reprezentovaný celým číslem typu int
.
Nastavení parametrů komunikace je možné prostřednictvím funkce knihovny <termios.h>
, například nastavení rychlosti 115200 bps spolu s VMIN a VTIME (viz např. Understanding UNIX termios VMIN and VTIM) lze ralizovat
int fd = open(fname, O_RDWR | O_NOCTTY | O_SYNC); struct termios term;prg_serial.h a tcgetattr(fd, &term); cfmakeraw(&term); term.c_cc[VTIME] = 2; //set vtime term.c_cc[VMIN] = 1; cfsetispeed(&term, BAUD_RATE); cfsetospeed(&term, BAUD_RATE); tcsetattr(fd, TCSADRAIN, &term) >= 0); fcntl(fd, F_GETFL) >= 0); tcsetattr(fd, TCSADRAIN, &term); fcntl(fd, F_GETFL); tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &term);
kde pro jednoduchost netestujeme hodnoty návratových hodnot volání jednotlivých funkcí.
Pro znakově orientovaný vstup/výstup pak můžeme zapouzdřit volání read/write do samostatných funkcí např.
int serial_close(int fd) { return close(fd); } int serial_putc(int fd, char c) { return write(fd, &c, 1); }
Příslušné funkce pro otevření, zavření a čtení/zápis znaku jsou implementované v modulu prg_serial.