shm_openExistuje C++ třída mutex
sem_open - vytvářísem_close - ukončuje práci ssem_unlink - úplně likviduje (poslední proces)sem_postsem_waitsem_init - vytvářísem_destroy - volat před dealokaci pamětisem_postsem_waitSystem V Semafor 1
semget - alokuje (ve sdílené paměti) nebo získá semafor s daným idsemop - provádí operace se smaforem jako init, wait, post nebo i dealokacipipeint[2], kde index 0 je deskriptor pro zápis a index 1 pro čteníclosewrite, číst příkazem read#include <unistd.h> int pipefd[2]; pipe(pipefd); .. close(pipefd[0]); close(pipefd[1]);
STDIN_FILENO), stderr (STERR_FILENO) nebo stdout (STDOUT_FILENO)fcntl (pro každý konec roury)// set non-blocking mode if (fcntl(pipe_fd, F_SETFL, fcntl(pipe_fd, F_GETFL) | O_NONBLOCK) == -1) { fprintf(stderr,"Cannot set non-blocking mode to pipe\n"); }
// set blocking mode if (fcntl(pipe_fd, F_SETFL, fcntl(pipe_fd, F_GETFL) & ~O_NONBLOCK) == -1) { fprintf(stderr,"Cannot set blocking mode to pipe\n"); }
errno nastaví na EAGAINselectstruct timeval tv; fd_set rfds; fd_set wfds; int nfds; // set highest pipe FD +1 nfds = (pipefd[0]>pipefd[1])?pipefd[0]+1:pipefd[1]+1; while(...) { FD_ZERO(&rfds); FD_SET(pipefd[0],&rfds); FD_ZERO(&wfds); FD_SET(pipefd[1],&wfds); tv.tv_sec = 5; tv.tv_usec = 0; if (select(nfds, &rfds, &wfds, NULL, &tv) == -1) { fprintf(stderr,"pipe error %d\n", errno); } if (FD_ISSET(pipefd[0], &rfds)) { .. // do reading } .. }