小工具知识网

当前位置: 首页 > 行业知识 > 嵌入式Linux学习DAY26

行业知识

嵌入式Linux学习DAY26

2026-10-20 04:12:48 来源:互联网转载

���道的作用:进程间的通信

无名管道:

只能在父子进程中进行通信

          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 

上一篇:手游如何查看服务器?

下一篇:dns服务器是什么怎么打开?