学习记录第三十天

管道:

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

有名管道:是一种特殊的文件,存在于内存中,在系统中有对应的名称,文件大小为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两个信号不能被阻塞,处理和忽略;

相关推荐
撩得Android一次心动2 小时前
Linux编程笔记4【个人用】
linux·笔记·学习
user-猴子2 小时前
让网页“活”过来 —— 用AI打造会自主学习的动态知识图谱
人工智能·学习·知识图谱
网络工程小王3 小时前
【HCIE-AI】10.pytorch模型迁移分析
人工智能·学习·华为·llama
魔城烟雨4 小时前
从零开始学习betaflight《3-硬件接口设计规范标准》
学习·设计规范
不言鹅喻6 小时前
HarmonyOS ArkTS 实战:实现一个单词背诵与英语学习应用
学习·华为·harmonyos
正经人_x7 小时前
学习日记42
学习
一只小菜鸡..7 小时前
南京大学 操作系统 (JYY) 学习笔记:导论与历史的轮回 (OS Introduction)
笔记·学习
小弥儿7 小时前
GitHub 今日热榜 | 2026-07-24:金融 K 线基础模型上榜
学习·金融·开源·github
520拼好饭被践踏8 小时前
JAVA+Agent学习day22
java·开发语言·后端·学习
懿路向前8 小时前
【HarmonyOS学习笔记】2026-07-24 | textProcessing 实体识别与踩坑实录
笔记·学习·边缘计算·harmonyos