Слайд 2
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-1.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 3
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-2.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 4
![SysV SysV Object id](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-3.jpg)
Слайд 5
![SysV SysV Object id id](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-4.jpg)
Слайд 6
![SysV SysV Object id id fork()](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-5.jpg)
SysV
SysV Object
id
id
fork()
Слайд 7
![SysV SysV Object id = const id = const](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-6.jpg)
SysV
SysV Object
id = const
id = const
Слайд 8
![SysV (ftok) SysV Object id = ftok(const char *pathname, int](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-7.jpg)
SysV (ftok)
SysV Object
id = ftok(const char *pathname, int proj_id);
id = ftok(const
char *pathname, int proj_id);
Слайд 9
![SysV (ftok) SysV Object id = ftok(const char *pathname, int](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-8.jpg)
SysV (ftok)
SysV Object
id = ftok(const char *pathname, int proj_id);
1
2
3
1
2
3
4
5
2
3
4
5
6
5
4
3
2
1
8
8
16
Слайд 10
![SysV (ipcs) Вывод ipcs. ------ Shared Memory Segments -------- key](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-9.jpg)
SysV (ipcs)
Вывод ipcs.
------ Shared Memory Segments --------
key shmid owner perms bytes
nattch status
------ Semaphore Arrays --------
key semid owner perms nsems
0x002fa327 0 root 666 2
------ Message Queues --------
key msqid owner perms used-bytes messages
Слайд 11
![SysV (ipcrm) Использование ipcrm. ipcrm –M shmkey ipcrm –m shmid](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-10.jpg)
SysV (ipcrm)
Использование ipcrm.
ipcrm –M shmkey
ipcrm –m shmid
ipcrm –Q msgley
ipcrm –q msgid
ipcrm
–s semkey
ipcrm –S semid
Слайд 12
![SysV (Права доступа) Обладают идентификаторам пользователя и группы Группы –](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-11.jpg)
SysV (Права доступа)
Обладают идентификаторам пользователя и группы
Группы – означает создателя
Девять бит
– rwxrwxrwx
Бит x не имеет смысла
Слайд 13
![SysV (Права доступа) ipc_perm. struct ipc_perm { uid_t uid; gid_t](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-12.jpg)
SysV (Права доступа)
ipc_perm.
struct ipc_perm {
uid_t uid;
gid_t gid;
uid_t cuid;
git_t cgid;
mode_t mode;
}
Слайд 14
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-13.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 15
![SysV POSIX Object str str](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-14.jpg)
Слайд 16
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-15.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 17
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-16.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 18
![Очереди сообщений (SysV) int msgget(key_t key, int flags); ftok(…); IPC_CREAT O_CREAT IPC_CREAT](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-17.jpg)
Очереди сообщений (SysV)
int msgget(key_t key, int flags);
ftok(…);
IPC_CREAT
O_CREAT
IPC_CREAT
Слайд 19
![Очереди сообщений (SysV) int msgget(key_t key, int flags); ftok(…); IPC_CREAT O_CREAT IPC_CREAT IPC_PRIVATE](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-18.jpg)
Очереди сообщений (SysV)
int msgget(key_t key, int flags);
ftok(…);
IPC_CREAT
O_CREAT
IPC_CREAT
IPC_PRIVATE
Слайд 20
![Очереди сообщений (SysV) msgctl. int msgctl(int msgq, int cmd /*](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-19.jpg)
Очереди сообщений (SysV)
msgctl.
int msgctl(int msgq,
int cmd /* IPC_SET, IPC_STAT, IPC_RMID
*/,
struct msqid_ds *data);
struct msqid_ds {
struct ipc_perm msg_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode;
}
msgqnum_t msg_qnum;
msglen_t msg_qbytes;
pid_t msg_lspid, msg_lrpid;
time_t msg_stime, msg_rtime, msg_ctime;
}
Слайд 21
![Очереди сообщений (SysV) msgsnd/msgrcv. int msgsnd(int msgid, const void *msgp,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-20.jpg)
Очереди сообщений (SysV)
msgsnd/msgrcv.
int msgsnd(int msgid,
const void *msgp,
size_t msgsz,
int
msgflg);
int msgrcv(int msgid,
void *msgp,
size_t msgsz,
long msgtyp,
int msgflg);
struct msg {
long mtype;
char mtext[MTEXTSIZE];
}
Слайд 22
![Очереди сообщений (SysV) msgsnd/msgrcv. int msgsnd(int msgid, const void *msgp,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-21.jpg)
Очереди сообщений (SysV)
msgsnd/msgrcv.
int msgsnd(int msgid,
const void *msgp,
size_t msgsz,
int
msgflg);
int msgrcv(int msgid,
void *msgp,
size_t msgsz,
long msgtyp,
int msgflg);
struct msg {
long mtype;
char mtext[MTEXTSIZE];
}
Слайд 23
![Очереди сообщений (SysV) msgsnd/msgrcv. int msgsnd(int msgid, const void *msgp,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-22.jpg)
Очереди сообщений (SysV)
msgsnd/msgrcv.
int msgsnd(int msgid,
const void *msgp,
size_t msgsz,
int
msgflg);
int msgrcv(int msgid,
void *msgp,
size_t msgsz,
long msgtyp,
/* ‘=0’ – Any, ‘>0’ – Current, ‘<0’ - <= abs(Current) */
int msgflg);
struct msg {
long mtype; // Not 0
char mtext[MTEXTSIZE];
}
Слайд 24
![Очереди сообщений (SysV) msgsnd/msgrcv. int msgsnd(int msgid, const void *msgp,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-23.jpg)
Очереди сообщений (SysV)
msgsnd/msgrcv.
int msgsnd(int msgid,
const void *msgp,
size_t msgsz,
int
msgflg);
int msgrcv(int msgid,
void *msgp,
size_t msgsz,
long msgtyp,
/* ‘=0’ – Any, ‘>0’ – Current, ‘<0’ - <= abs(Current) */
int msgflg); // MSG_NOERROR, IPC_NOWAIT => EAGAIN
struct msg {
long mtype; // Not 0
char mtext[MTEXTSIZE];
}
Слайд 25
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-24.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 26
![Очереди сообщений (POSIX) mq_open. mqd_t mq_open(const char *name, int flags);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-25.jpg)
Очереди сообщений (POSIX)
mq_open.
mqd_t mq_open(const char *name,
int flags);
// O_RDONLY, O_WRONLY, O_RDWR,
O_NONBLOCK
mqd_t mq_open(const char *name,
int flags,
mode_t perms,
struct mq_attr *attr);
// + O_CREAT, O_EXCL
int mq_getattr(mqd_t mqd,
struct mq_attr *attr);
int mq_setattr(mqd_t mqd,
const struct mq_attr *attr,
struct mq_attr *oldattr);
Слайд 27
![Очереди сообщений (POSIX) mq_attr. struct mq_attr { long mq_flags; long mq_maxmsg; long mq_msgsize; long mq_curmsg; }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-26.jpg)
Очереди сообщений (POSIX)
mq_attr.
struct mq_attr {
long mq_flags;
long mq_maxmsg;
long mq_msgsize;
long mq_curmsg;
}
Слайд 28
![Очереди сообщений (POSIX) mq_close/mq_unlink. int mq_close(mqd_t mqd); int mq_unlink(const char *name);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-27.jpg)
Очереди сообщений (POSIX)
mq_close/mq_unlink.
int mq_close(mqd_t mqd);
int mq_unlink(const char *name);
Слайд 29
![Очереди сообщений (POSIX) mq_send/mq_receive. int mq_send(mqd_t mqd, const char *msg,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-28.jpg)
Очереди сообщений (POSIX)
mq_send/mq_receive.
int mq_send(mqd_t mqd,
const char *msg,
size_t msgsize,
unsigned
priority /* 0..31..> */);
ssize_t mq_receive(mqd_t mqd,
char *msg,
size_t msgsize,
unsigned *priorityp);
Слайд 30
![Очереди сообщений (POSIX) mq_timedsend/mq_timedreceive. int mq_timedsend(mqd_t mqd, const char *msg,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-29.jpg)
Очереди сообщений (POSIX)
mq_timedsend/mq_timedreceive.
int mq_timedsend(mqd_t mqd,
const char *msg,
size_t msgsize,
unsigned
priority,
const struct timespec *tmout);
ssize_t mq_timedreceive(mqd_t mqd,
char *msg,
size_t msgsize,
unsigned *prtorityp,
const struct timespec *tmout);
Слайд 31
![Очереди сообщений (POSIX) mq_notify. int mq_notify( mqd_t mqd, const struct](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-30.jpg)
Очереди сообщений (POSIX)
mq_notify.
int mq_notify(
mqd_t mqd,
const struct sigevent *ep);
// 1.
После вызова mq_notify: извлечь все сообщения из очереди (O_NONBLOCK).
// 2. После прибытия сигнала: Вызвать mq_notify и выполнить (1).
Слайд 32
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-31.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 33
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-32.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 34
![Семафоры (POSIX) semget. int semget(key_t key, int nsems, int flags);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-33.jpg)
Семафоры (POSIX)
semget.
int semget(key_t key, int nsems, int flags);
Слайд 35
![Семафоры (POSIX) semctl. int semctl(int semid, int semnum, int cmd, union semun arg);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-34.jpg)
Семафоры (POSIX)
semctl.
int semctl(int semid, int semnum, int cmd, union semun arg);
Слайд 36
![Семафоры (POSIX) semctl. int semctl(int semid, int semnum, int cmd,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-35.jpg)
Семафоры (POSIX)
semctl.
int semctl(int semid, int semnum, int cmd, union semun arg);
union
semun { int val; struct semid_ds *buf; unsigned short *array; }
Слайд 37
![Семафоры (POSIX) semctl. int semctl(int semid, int semnum, int cmd,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-36.jpg)
Семафоры (POSIX)
semctl.
int semctl(int semid, int semnum, int cmd, union semun arg);
union
semun { int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
Слайд 38
![Семафоры (POSIX) semctl. int semctl(int semid, int semnum, int cmd,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-37.jpg)
Семафоры (POSIX)
semctl.
int semctl(int semid, int semnum, int cmd, union semun arg);
union
semun { int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
Слайд 39
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, int cmd,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-38.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, int cmd, union semun arg);
union
semun { int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
Слайд 40
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, int cmd,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-39.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, int cmd, union semun arg);
union
semun { int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
Слайд 41
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, IPC_RMID, union](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-40.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, IPC_RMID, union semun arg);
union semun
{ int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
Слайд 42
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, IPC_STAT, union](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-41.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, IPC_STAT, union semun arg);
union semun
{ int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
Слайд 43
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, IPC_SET, union](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-42.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, IPC_SET, union semun arg);
union semun
{ int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
Слайд 44
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, GETNCNT, union](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-43.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, GETNCNT, union semun arg);
union semun
{ int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
// Получить количество процессов, ожидающих увеличения значения семафора.
Слайд 45
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, GETZCNT, union](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-44.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, GETZCNT, union semun arg);
union semun
{ int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
// Получить количество процессов, ожидающих, пока значение семафора не достигнет нуля.
Слайд 46
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, GETPID, union](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-45.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, GETPID, union semun arg);
union semun
{ int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
// Получить PID последнего, обратившегося в semop, процесса.
Слайд 47
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, GETVAL, union](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-46.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, GETVAL, union semun arg);
union semun
{ int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
// Получить значение семафора.
Слайд 48
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, SETVAL, union](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-47.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, SETVAL, union semun arg);
union semun
{ int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
// Установить значение семафора.
Слайд 49
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, GETALL, union](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-48.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, GETALL, union semun arg);
union semun
{ int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
// Получить значение всех семафоров.
Слайд 50
![Семафоры (SysV) semctl. int semctl(int semid, int semnum, SETALL, union](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-49.jpg)
Семафоры (SysV)
semctl.
int semctl(int semid, int semnum, SETALL, union semun arg);
union semun
{ int val; struct semid_ds *buf; unsigned short *array; }
struct semid_ds {
struct ipc_perm sem_perm;
unsigned short sem_nsems;
time_t sem_otime; time_t sem_ctime; }
struct ipc_perm {
uid_t uid; gid_t gid;
uid_t cuid; git_t cgid;
mode_t mode; }
// Установить значение всех семафоров.
Слайд 51
![Семафоры (SysV) semop. int semop(int semid, struct sembuf *sops, size_t](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-50.jpg)
Семафоры (SysV)
semop.
int semop(int semid, struct sembuf *sops, size_t nsops);
struct sembuf {
unsigned short sem_num;
short sem_op;
short sem_flg; }
sem_op > 0 – добавляем semop к значению семафора
sem_op < 0 – ждем, пока значение семафора меньше |sem_op|, потом его вычитаем
sem_op = 0 – ждем, пока значением семафора не 0
IPC_NOWAIT
IPC_UNDO
Слайд 52
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-51.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 53
![Семафоры (POSIX) sem_open/sem_close/sem_unlink. sem_t *sem_open(const char *name, int flags); sem_t](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-52.jpg)
Семафоры (POSIX)
sem_open/sem_close/sem_unlink.
sem_t *sem_open(const char *name, int flags);
sem_t *sem_open(const char *name,
int
flags,
mode_t perms,
unsigned value);
int sem_close(sem_t *sem);
int sem_unlink(const char *name);
Слайд 54
![Семафоры (POSIX) Работа с семафором. int sem_post(sem_t *sem); // +1](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-53.jpg)
Семафоры (POSIX)
Работа с семафором.
int sem_post(sem_t *sem); // +1
int sem_wait(sem_t *sem); //
-1
int sem_trywait(sem_t *sem); // Like O_NONBLOCK or IPC_NOWAIT
int sem_timedwait(sem_t *restrict sem,
const struct timespec *time);
int sem_getvalue(sem_t *restrict sem,
int *valuep);
Слайд 55
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-54.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 56
![Семафоры (POSIX) sem_init/sem_destroy. int sem_init(sem_t *sem, int pshared, unsigned value); int sem_destroy(sem_t *sem);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-55.jpg)
Семафоры (POSIX)
sem_init/sem_destroy.
int sem_init(sem_t *sem, int pshared, unsigned value);
int sem_destroy(sem_t *sem);
Слайд 57
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-56.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 58
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-57.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 59
![Общая память (SysV) Создание и управление. int shmget(key_t key, size_t](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-58.jpg)
Общая память (SysV)
Создание и управление.
int shmget(key_t key, size_t size, int flags);
int
shmctl(int shmid, int cmd, struct shmid_ds *data);
struct shmid_ds {
struct ipc_perm shm_perm;
size_t shm_segsz;
pid_t shm_lpid;
pid_t shm_cpid;
shmatt_t shm_nattch;
time_t shm_atime;
time_t shm_dtime;
time_t shm_ctime; }
Слайд 60
![Общая память (SysV) Присоединение и отсоединение. void *shmat(int shmid, const](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-59.jpg)
Общая память (SysV)
Присоединение и отсоединение.
void *shmat(int shmid,
const void *shmaddr /*
EINVAL */,
int flags /* SHM_RND, SHM_RDONLY */);
int shmdt(const void *shmaddr);
Слайд 61
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-60.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 62
![Отображение файлов в память mmap/munmap. void *mmap( void *addr, size_t](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-61.jpg)
Отображение файлов в память
mmap/munmap.
void *mmap(
void *addr,
size_t len,
int prot,
// PROT_NONE, PROT_READ, PROT_WRITE, PROT_EXEC
int flags, // MAP_PRIVATE, MAP_SHARED, MAP_FIXED, MAP_ANONYMOUS
int fd,
off_t off);
int munmap(
void *addr,
size_t len);
Слайд 63
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-62.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 64
![Отображение файлов в память shm_open/shm_unlink. int shm_open( const char *name,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-63.jpg)
Отображение файлов в память
shm_open/shm_unlink.
int shm_open(
const char *name,
int flags,
mod_t
perms
);
int ftruncate(int fd, off_t length);
shm_unlink(const char *name);
Слайд 65
![IPC Очереди сообщений Семафоры Общая память POSIX SysV msgget msgctl](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-64.jpg)
IPC
Очереди сообщений
Семафоры
Общая память
POSIX
SysV
msgget
msgctl
msgsnd
msgrcv
mq_open
mq_close
mq_unlink
mq_send
mq_receive
…
semget
semctl
semop
sem_open
sem_close
sem_unlink
sem_wait
sem_post
…
sem_init
sem_destroy
shmget
shmctl
shmat
shmdt
shm_open
shm_unlink
mmap
munmap
…
Слайд 66
![Таймеры Будильник. unsigned alarm(unsigned secs);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-65.jpg)
Таймеры
Будильник.
unsigned alarm(unsigned secs);
Слайд 67
![Таймеры Сон. unsigned sleep(unsigned secs); unsigned usleep(useconds_t usecs); unsigned nanosleep(const](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-66.jpg)
Таймеры
Сон.
unsigned sleep(unsigned secs);
unsigned usleep(useconds_t usecs);
unsigned nanosleep(const struct timespec *nsecs,
struct timespec
*remain);
tv_sec
tv_nsec
Слайд 68
![Таймеры Виды таймеров. ITIMER_REAL – реальное время, SIGALRM ITIMER_VIRTUAL –](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-67.jpg)
Таймеры
Виды таймеров.
ITIMER_REAL – реальное время, SIGALRM
ITIMER_VIRTUAL – виртуальное время, SIGVTALRM
ITIMER_PROF –
время работы в процессе + время работы в ядре от имени процесса, SIGPROF
int getitimer(int which, struct itimerval *val);
int settimer(int which, const struct itimerval *val,
struct itimerval *oval);
struct itimerval { struct timeval it_interval, it_value);
Слайд 69
![Передача дескрипторов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-68.jpg)
Слайд 70
![Передача дескрипторов sendmsg/recvmsg. ssize_t sendmsg(int sockfd, const struct msghdr *msg,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-69.jpg)
Передача дескрипторов
sendmsg/recvmsg.
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
ssize_t recvmsg(int
sockfd, struct msghdr *msg, int flags);
struct iovec {
void *iov_base;
size_t iov_len;
};
struct msghdr {
void *msg_name;
socklen_t msg_namelen;
struct iovec *msg_iov;
size_t msg_iovlen;
void *msg_control;
size_t msg_controllen;
int msg_flags;
};
Слайд 71
![Передача дескрипторов cmsghdr. struct cmsghdr { socklen_t cmsg_len; /* счетчик](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-70.jpg)
Передача дескрипторов
cmsghdr.
struct cmsghdr {
socklen_t cmsg_len; /* счетчик байтов данных с
заголовком */
int cmsg_level; /* создаваемый протокол передачи */
int cmsg_type; /* тип, зависящий от протокола */
/* с последующей переменной без знакаc msg_data[]; */
};
Слайд 72
![Передача дескрипторов Макросы. struct cmsghdr *CMSG_FIRSTHDR(struct msghdr *msgh); struct cmsghdr](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-71.jpg)
Передача дескрипторов
Макросы.
struct cmsghdr *CMSG_FIRSTHDR(struct msghdr *msgh);
struct cmsghdr *CMSG_NXTHDR(struct msghdr *msgh, struct
cmsghdr *cmsg);
size_t CMSG_ALIGN(size_t length);
size_t CMSG_SPACE(size_t length);
size_t CMSG_LEN(size_t length);
unsigned char *CMSG_DATA(struct cmsghdr *cmsg);
Слайд 73
![Передача дескрипторов Пример. http://keithp.com/blogs/fd-passing/](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/358697/slide-72.jpg)
Передача дескрипторов
Пример.
http://keithp.com/blogs/fd-passing/