学习记录第三十天

管道:

无名管道:只能用于亲缘关系进程之间的通信:

有名管道:是一种特殊的文件,存在于内存中,在系统中有对应的名称,文件大小为0字节;

编程:

Linux系统中,有名管道通常通过mkfifo命令或mkfifo()系统调用来创建。一旦创建,有名管道就可以像普通文件一样被打开、读取和写入。

创建有名管道:
cs 复制代码
# 使用mkfifo命令  
mkfifo /tmp/mypipe  
  
# 或者在C程序中  
#include <sys/types.h>  
#include <sys/stat.h>  
#include <fcntl.h>  
  
int main() {  
    mkfifo("/tmp/mypipe", 0666); // 创建有名管道,设置权限为666  
    return 0;  
}

参数说明:

pathname:管道名称的路径;

mode:FIFO的权限,和open是一样的;如0666;

返回值:成功返回0,失败返回-1,并设置对应的errno;

有名管道的注意事项

1、一个进程以只读打开管道会阻塞,直到另外一个进程以只写打开管道;

2、一个进程以只写打开管道会阻塞,直到另外一个进程以只读打开管道;

读管道:

管道中有数据,read返回实际读到的字节数;

管道中无数据:

管道写端被全部关闭,read返回0,相当于读到文件末尾;

写管道:

管道读端全部关闭,进程异常终止,收到信号SIGPIPE;

管道读端没有被全部关闭:

管道已经满了,write阻塞等待

管道没有满,write将数据写入,并返回实际写入的字节数;

cs 复制代码
#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <fcntl.h>  
#include <string.h>  
  
int main() {  
    int fd;  
    char buf[1024];  
  
    // 写进程  
    fd = open("/tmp/mypipe", O_WRONLY);  
    if (fd == -1) {  
        perror("open");  
        exit(NULL);  
    }  
    write(fd, "Hello, pipe!", 13);  
    close(fd);  
  
    // 读进程(在另一个程序中)  
    fd = open("/tmp/mypipe", O_RDONLY);  
    if (fd == -1) {  
        perror("open");  
        exit(NULL);  
    }  
    read(fd, buf, sizeof(buf) - 1);  
    buf[sizeof(buf) - 1] = '\0';  
    printf("Received: %s\n", buf);  
    close(fd);  
  
    return 0;  
}

信号:

本身并不能传递大量数据;信号被称为软中断(软件层面),软中断是操作系统中用于处理异步事件的一种机制,它通过软件方式模拟硬件中断的行为,使得系统能够在不直接打断当前进程执行的情况下,处理一些非紧急但耗时的任务。软中断的典型应用之一是"下半部"(bottom half)机制,即将硬件中断处理过程分为"上半部"和"下半部"两个阶段,其中"下半部"即为软中断处理的部分。

signal()

  • 原型:void (*signal(int sig, void (*func)(int)))(int);
  • 功能:设置信号的处理函数。sig是要处理的信号编号,func是新的信号处理函数。如果funcSIG_IGN,则忽略该信号;如果funcSIG_DFL,则恢复该信号的默认处理行为。
  • 注意:signal()的行为在不同的系统上可能有所不同,特别是在处理信号时。

SIGKILL,SIGSTOP两个信号不能被阻塞,处理和忽略;

相关推荐
通信小呆呆17 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick17 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee17 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn8617 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e17 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨17 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
cqbzcsq17 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
YangYang9YangYan17 天前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析
guslegend17 天前
理论学习:什么是 Coding Agent?
学习
自传.17 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding