加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX环境高级编程:进程管理和通信

发布时间:2016-09-27 18:52:05 所属栏目:Unix 来源:站长网
导读:副标题#e# 进程和程序的区别: 进程: 程序的一次执行过程 动态过程,进程的状态属性会发生变化 程序:存放在磁盘上的指令、数据的有序集合 是个文件,可直观看到 程序program 静态的概念,本身不会发生变化。指令谁来执行,数据谁来访问?cpu! 但前提是cpu

创建管道:

#include <unistd.h>

#include <fcntl.h>

#include <sys/types.h>

int mkfifo(

const char *filename,//要创建的管道。

mode_t mode //指定创建的管道的访问权限,一般用8进制数表示.

);

返回值

成功:0

出错:-1,并设置相应的errno.

errno:

EACCESS参数filename所指定的目录路径无可执行的权限

EEXIST参数filename所指定的文件已存在

ENAMETOOLONG参数filename的路径名称太长

ENOENT参数filename包含的目录不存在

ENOSPC文件系统的剩余空间不足

EROFS参数filename指定的文件存在于只读文件系统内

fifo总结:

第一 O_RDONLY O_WRONLY

读端open(O_RDONLY…) 写端 open(O_WRONLY…), 只有读或只有写端时,open阻塞。验证,reader和writer程序,只运行一个。

写端关闭,只剩下读端时,read立即返回0.

读端关闭,只剩下写端时,写端被SIGPIPE信号终止。

在一般情况中(没有说明O_NONBLOCK),只读打开要阻塞到某个其他进程为写打开此FIFO。类似,为写而打开一个FIFO要阻塞到某个其他进程为读而打开它。

第二 O_NONBLOCK

当打开一个FIFO时,非阻塞标志(O_NONBLOCK)产生下列影响:

如果指定了O_NONBLOCK,则只读打开立即返回。但是,如果没有进程已经为读打开一个FIFO,那么,只写打开将出错返回,其errno是ENXIO。

第三 O_RDWR

读端和写端都是O_RDWR方式,两端都运行,若写端写完后退出了(输入quit)。则读端是以O_RDWR方式打开的,相当于自己也是一个写端,写端存在,又没东西读,也会阻塞。

信号

是软件层面对中断的一种模拟,唯一的异步方式。

进程队信号的响应方式:

缺省:Linux对每种信号都规定了默认操作(signal(SIGUSR1,SIG_DFL))。

忽略:但SIGKILL、SIGSTOP不能被忽略,只能按默认操作去执行(signal(SIGUSER1,SIG_IGN))。

捕捉:按指定的操作去执行(signal(SIGUSR1,fun//fun指向用户自定义函数的指针))。

关闭守护进程可发信号,普通用户只能给自己创建的进程发信号。

信号的生存周期

UNIX环境高级编程:进程管理和通信

信号的使用场合:

后台进程需要使用信号,如xinetd

如果两个进程没有亲缘关系,无法使用无名管道

如果两个通信进程之一只能使用标准输入和标准输出,则无法使用FIFO

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读