本文主要是介绍嵌入式Linux学习DAY26,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
管道的作用:进程间的通信
无名管道:
只能在父子进程中进行通信
pipe
int pipe(int pipefd[2]);
功能:
创建一个无名管道
参数:
pipefd[0]:读管道文件描述符
pipefd[1]:写管道文件描述符
返回值:
成功返回0
失败返回-1
无名管道特性:
1.管道中至少有一个写端:
读取数据时,如果管道中有数据直接读取,管道中没有数据阻塞等待直到有数据写入读出,继续向后执行
2.管道中没有写端:
读取数据时,如果管道中有数据直接读取,管道中没有数据不阻塞等待直接向下执行
3.管道中至少有一个读端:
写入数据时,如果管道中没有存满,则直接写入,管道中如果存满,则阻塞等待直到有数据读出,才能继续写入
4.管道中没有读端:
写入数据时,会产生管道破裂错误,导致程序崩溃
有名管道:
打开管道文件 -> 读写管道文件 -> 关闭管道文件
注意:有名管道必须读写两端同时加入才能继续向下执行
1.mkfifo
int mkfifo(const char *pathname, mode_t mode);
功能:
创建一个管道文件
参数:
pathname:管道文件路径
mode:权限
返回值:
成功返回0
失败返回-1
有名管道的双工通信代码编写:
思路:两个文件,每个文件设两个进程,a进程用于发送信息,b进程用于接受信息
memset函数
void *memset(void *s, int c, size_t n);
功能:将S中的值全赋成c-----将s初始化。
2.信号
实现内核层与用户层的信息交互,或者进程间的通信
2.1信号的种类:
kill-l 查询信号
kill -信号序号 +进程pid 对进程进行操作
2.2信号处理方式:
2.2.1缺省:默认方式
2.2.2忽略:不相应信号
2.2.3捕捉:按自定义方式处理
9号SIGKILL,19号SIGSTOP不能被忽略和捕捉
SIGINT:Ctrl+c
SIGQUIT:ctrl+\
SIGTSTP:ctrl+z
2.2.4signal
void fun(int a);
signal(SIGN,fun);
功能:
改变信号的处理方式
参数:SIGN:信号名称
fun:遇到信号后的处理方式的函数
返回值:
成功返回之前处理函数的首地址
失败返回SIG_ERR
这篇关于嵌入式Linux学习DAY26的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!