LINUX系统编程之IPC(Inter Processes Communication)
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、成都网站建设、桓台网络推广、微信小程序开发、桓台网络营销、桓台企业策划、桓台品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;成都创新互联为所有大学生创业者提供桓台建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com一、信号
1.信号的产生
软件中断,异步通信,ctrl+c,kill函数,kill命令,硬件异常(段错误),软件异常
2.进程收到信号后可以用如下方法处理:
执行系统默认动作(终止),忽略此信号,执行自定义信号处理函数。
3.信号操作函数
kill(), alarm(), raise(), abort(), pause()
typedef void (*sighandler_t)(int);signal()
sigemptyset(), sigfillset(), sigismember(), sigdelset(), sigaddset()....
信号阻塞集:阻塞信号的接收sigprocmask();
二、管道/命名管道
1.无名管道:类似于一个文件,有2个文件描述符,只存在于内存
半双工,数据从写端入,读端出,先入先出,fd[0]输出,fd[1]写入
数据无格式要求,只固定大小,没有名字,用fork和vfork会继承其描述符
只有公共祖先进程使用,如父进程创建的管道只有该父进程和其子进程能访问
int fd[2];
pipe(fd);
write();read();
close(fd);
read从管道中读取数据时会阻塞,有数据就读到返回,没数据则等待,
write从管道写数据,写满阻塞,直到数据被读出
如果读进程退出了,写进程写数据时也会退出可用fcntl()设置阻塞特性
dup(old)复制old文件描述符并分配一个新的描述符,读写位置也会复制
dup2(old, new)复制文件描述符old,分配新的文件描述符new, new也标识old所标识的文件
常用如重定向0,1,2描述符
int fd_stdout=dup(1);复制stdout描述符1
dup2(fd_stdout, 1);将描述符1重新分配给stdout
2.命名管道FIFO
有名字,存在于文件系统,内容只存在于内存
不相关的进程也能使用
命名管道复制后会变成普通文件
mkfifo("./cmd_fifo", 0777);
open("./cmd_fifo", O_RDWR);
write();read();
close();
3.消息队列
由内核维护的链表,消息有格式(结构体),消息有类型,可按照类型随机查询
有标识符,只有内核重启或人工删除才能删除
结构体第一个成员代表消息类型必须是long型变量,其它自行定义
发送消息msgsent(msqid, &msg, sizeof(msg)-4, 0);
接收消息msgrcv(msqid, &msg, sizeof(msg)-4, type, 0);返回长度
控制msgctl(msgqid, IPC_RMID, NULL)
typedef struct _msg
{
long mtype;
char mtext[50];
}MSG;
MSG msg;
key=ftok(".", 2012)
msgqid = msgget(key, IPC_CREAT|0666);
if(msgqid==-1)
perror("msgget");
msgrcv(msgqid, &msg, sizeof(msg.mtext), 10, 0);
msgctl(msgqid, IPC_RMID, NULL);
查看消息队列ipcs -q
删除消息队列ipcrm -q msgqid
4.共享内存
多个进程共享给定的存储空间
最快的通信方式,访问互斥
查看ipcs -m
删除ipcrm -m shmid
创建或打开int shmid = shmget(key, size, flag);
内存映射shmat()
解除映射shmdt()
控制shmctl()
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。