posts - 91,comments - 0,views - 12645

随笔分类 -  linux系统调用

POSIX 多线程 ------ 线程
摘要:多线程 当引入线程后,进程可以看作是 资源的集合,线程可以看作是 执行单元,线程之间共享进程的某些资源,比如文件描述符等等,这方便了线程之间的通信,每个线程都有自己的堆栈(因为线程的启动函数可能不同,甚至可能递归) 简单来说就是,同一个进程内的线程可以共享一些资源,每个线程都有自己的执行环境 初始线 阅读全文
posted @ 2024-12-29 22:06 Dylaris 阅读(8) 评论(0) 推荐(0) 编辑
文件加锁
摘要:文件加锁 对文件加锁是为了避免,多个进程或线程这种并发情况下,对同一个文件进行修改时造成的混乱 比如说进程A修改了文件的内容,进程B也修改了文件的内容,并且覆盖了A写的内容,然么进程A读取的内容就和预想的不同了,从而造成了混乱 对文件加锁就和信号量这些同步技术类似,只不过它是专门为文件设计的 对文件 阅读全文
posted @ 2024-11-10 17:38 Dylaris 阅读(44) 评论(0) 推荐(0) 编辑
POSIX 共享内存
摘要:POSIX 共享内存 与共享文件映射的区别 POSIX 共享内存能够让无关进程共享一个映射区域而无需创建一个相应的映射文件 POSIX共享内存主要用于 进程间通信 共享文件映射主要用于 磁盘文件IO 创建共享内存对象 int shm_open(const char *name, int oflag, 阅读全文
posted @ 2024-11-02 18:07 Dylaris 阅读(46) 评论(0) 推荐(0) 编辑
POSIX 信号量
摘要:命名信号量 命名信号量:这种信号量拥有一个名字。通过使用相同的名字调用sem_open(),不相关的进程能够访问同一个信号量 打开一个命名信号量 sem_t *sem_open(const char *name, int oflag, ... /* mode_t mode, unsigned int 阅读全文
posted @ 2024-11-02 17:42 Dylaris 阅读(21) 评论(0) 推荐(0) 编辑
POSIX 消息队列
摘要:POSIX 消息队列 定义 POSIX消息队列,它允许进程之间以消息的形式交换数据,即数据交换的基本单位是整个消息 消息队列就是存储消息的队列 特性 引用计数 POSIX 消息队列是引用计数的。只有当所有当前使用队列的进程都关闭了队列之后会对队列进行标记以便删除 优先级排队 POSIX消息有一个关联 阅读全文
posted @ 2024-10-27 11:43 Dylaris 阅读(25) 评论(0) 推荐(0) 编辑
内存映射
摘要:系统调用(mmap和munmap) mmap 内存映射类型 mmap() 系统调用用于在调用进程的虚拟地址空间中 创建内存映射,主要分为两种类型: 文件映射:将文件的一部分直接映射到虚拟内存中,允许通过内存访问文件内容,映射的分页会在需要时自动加载 匿名映射:没有对应文件,分页初始化为0,可以视为一 阅读全文
posted @ 2024-10-21 22:40 Dylaris 阅读(101) 评论(0) 推荐(0) 编辑
管道和FIFO
摘要:管道 概述 管道为一个常见需求提供了一个优雅的解决方案:给定两个运行不同程序(命令)的进程,在shell中如何让一个进程的输出作为另一个进程的输入呢?管道可以用来在相关进程之间传递数据。 管道其实就和真实的管道类似,它可以进行数据的传递,比如说水管,它就可以把水流从一端送到另一端。管道也是一样的,它 阅读全文
posted @ 2024-10-14 21:05 Dylaris 阅读(25) 评论(0) 推荐(0) 编辑
linux中的进程内存布局
摘要:虚拟内存 在我们编写程序的时候,我们使用的是虚拟内存布局,它是建立在真实的物理内存之上,虚拟内存一般是比物理内存要大,并且每个进程都享有独立的虚拟内存 所以我们要明白我们在程序中使用的是虚拟内存,虚拟内存经过一些内存映射,才能被映射到真实的物理内存 局部性 空间局部性(Spatial localit 阅读全文
posted @ 2024-10-12 13:51 Dylaris 阅读(44) 评论(0) 推荐(0) 编辑
linux中的线程
摘要:线程 一个进程可以包含多个线程。同一程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域,其中包括初始化数据段(initialized data)、未初始化数据段(uninitialized data),以及堆内存段(heap segment) 多线程的进程内存布局 文本段、数据段这些,线 阅读全文
posted @ 2024-10-11 22:40 Dylaris 阅读(106) 评论(0) 推荐(0) 编辑
linux中进程的创建和终止
摘要:进程的创建 fork fork函数用来创建一个子进程 子进程获得父进程的栈、数据段、堆和执行文本段的拷贝 内存节约 需要注意的是,执行文本段其实就是代码段,这个段是父子进程共享的,换句话说,虚拟的进程空间各自有一份,但是指向的物理空间共享一份 还有,对于父进程数据段、堆段和栈段中的各页,内核采用写时 阅读全文
posted @ 2024-10-02 21:09 Dylaris 阅读(49) 评论(0) 推荐(0) 编辑
linux中的信号处理器函数
摘要:信号处理器函数的设计 常见的两种 信号处理器函数设置全局性标志变量并退出。主程序对此标志进行周期性检查,一旦置位随即采取相应动作。 信号处理器函数执行某种类型的清理动作,接着终止进程或者使用非本地跳转将栈解开并将控制返回到主程序中的预定位置。 设计原则 简洁性 短小精悍:信号处理函数应该尽量简短,以 阅读全文
posted @ 2024-09-30 16:21 Dylaris 阅读(17) 评论(0) 推荐(0) 编辑
符号链接和硬链接
摘要:硬链接 硬链接其实就是一个文件的别名 我们看到下面这张图 ln t1 hard_link 这个命令表示我们给文件t1创建了一个硬链接hard_link 然后可以看到他们两个指向的inode编号(675970, 最左端的数字)是一样的,说明他们是同一个文件,然后在看到一个数字 2 ,这个数字是硬链接的 阅读全文
posted @ 2024-09-29 20:44 Dylaris 阅读(44) 评论(0) 推荐(0) 编辑
linux中的信号
摘要:标准信号 信号是事件发生时对进程的通知机制。有时也称之为软件中断。信号与硬件中断的相似之处在于打断了程序执行的正常流程,大多数情况下,无法预测信号到达的精确时间。 信号分为两大类。第一组用于内核向进程通知事件,构成所谓传统或者标准信号。Linux 中标准信号的编号范围为 1~31。另一组信号由实时信 阅读全文
posted @ 2024-09-29 19:48 Dylaris 阅读(51) 评论(0) 推荐(0) 编辑
使用dup2实现一个简单的命令重定向
摘要:以下是一个echo命令的的重定向的简单实现,大家可以把他改成main函数在执行,一样的,然后我们需要关注的部分就是代码中标有注释的代码块 #include "command.h" int _echo(char *argv[]) { int argc = 0; for (char **ptr = ar 阅读全文
posted @ 2024-09-24 13:11 Dylaris 阅读(12) 评论(0) 推荐(0) 编辑
IO 缓冲区
摘要:IO 缓冲区 认识 首先我们要明白一些概念,用户级和内核级,可以简单的理解为,我们平时的编程就是在用户级干活,而内核级就是操作系统的地盘,当我们需要操作系统帮忙的时候,就需要调用操作系统提供的一些接口,也就是系统调用(其实就是些函数),这时候就是由用户级进入到内核级执行 然后,我们还要理解一下缓冲区 阅读全文
posted @ 2024-09-23 13:47 Dylaris 阅读(29) 评论(0) 推荐(0) 编辑
文件描述符与文件流
摘要:文件描述符 文件描述符其实就是一些非0整数,他们代表着对应的文件,换句话说,对文件描述符进行操作就是在对文件进行操作 涉及到文件描述符的创建的一般常用的就以下几个(以目前所学来看) // 打开文件 open int fd = open(filepath, O_CREAT | O_RDONLY, 06 阅读全文
posted @ 2024-09-23 11:33 Dylaris 阅读(11) 评论(0) 推荐(0) 编辑
进一步认识系统调用write()和read()
摘要:简介 write 函数 ssize_t write(int fd, const void *buf, size_t count); fd:文件描述符,表示要写入的文件或设备 buf:指向要写入的数据的缓冲区 count:要写入的字节数 返回值:成功时返回写入的字节数;失败时返回 -1 read 函数 阅读全文
posted @ 2024-09-18 17:29 Dylaris 阅读(88) 评论(0) 推荐(0) 编辑
简单的磁盘文件IO
摘要:文件描述符 在linux中,文件IO的系统调用,是 以文件描述符,即一个非负整数,来指代打开的文件,你可以认为,操作文件描述符就是在操作文件 并且,对于每个进程而言,他们的文件描述符是自成一套的 以下截图是为了验证每个进程的文件描述符自成一套,我们可以看到有左边两个程序,t1.c和t2.c,他们几乎 阅读全文
posted @ 2024-09-12 21:27 Dylaris 阅读(12) 评论(0) 推荐(0) 编辑
什么是系统调用?
摘要:用户空间和内核空间 我们这里简单解释下这两个概念,我们平时的编程就是在用户空间去做的,然后内核空间一般是操作系统的地盘,主要就是和硬件打交道,控制资源分配等,它受到一些特定的保护,我们不能随意闯入 可以注意下,就是 用户空间的级别是比内核空间的级别低 的,换句话说,内核空间里的是老大,我们想要做一些 阅读全文
posted @ 2024-09-11 23:54 Dylaris 阅读(74) 评论(0) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示