写在前面
基本方法
- 通信:关注进程之间的数据交换
- 数据传输:
- 管道, FIFO, socket
- 伪终端
- 消息队列(POSIX/System V)
- 共享内存:
- 共享内存(POSIX/System V)
- 内存映射
- 数据传输:
- 同步:关注进程和线程操作之间的同步, 有以下四种主要形式:
- 信号量(POSIX/System V)
- 文件锁
- 互斥(线程)
- 条件变量(线程)
- 信号:尽管信号的主要作用并不在此,但在特定场景下仍然可以将它作为一种同步技术。更罕见的是信号还可以作为一种通信技术:信号编号本身是一种形式的信息,并且可以在实时信号上绑定数据(一个整数或指针)
- 标准信号
- 实时信号
信号
获取信号描述字符串
两种方法, 一种是读取全局数组, 一种是使用strsignal()
系统调用.
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#define getsig(x) (#x)
extern const char* const sys_siglist[];
void t1() {
int sig = SIGPIPE;
printf("sig:%d, %s, info:%s\n", sig, getsig(SIGPIPE), sys_siglist[sig]);
/* sig:13, SIGPIPE, info:Broken pipe */
}
extern char* strsignal(int);
void t2() {
printf("sig:%d, %s, info:%s\n", SIGPIPE, getsig(SIGPIPE),
strsignal(SIGPIPE));
/* sig:13, SIGPIPE, info:Broken pipe */
}
int main(int argc, char* argv[]) {
/* t1(); */
t2();
return 0;
}