
Linux/Unix
MLusrrt
兴趣是第一生产力
展开
-
文件IO缓冲
出于速度和效率考虑,系统IO调用和标准C语言库函数在操作磁盘文件时会对数据进行缓冲。1、文件IO的内核缓冲 read和write系统调用在操作磁盘文件时不会直接发起磁盘访问,而仅是在用户空间缓冲区和内核缓冲区之间复制数据。 write调用后会立即返回,在后续某个时刻内核才会将缓冲区中的数据写入磁盘,即系统调用和磁盘操作并不同步。如果在此期间,另一进程试图读取文件的这几个字节,那...原创 2018-03-17 15:27:09 · 556 阅读 · 0 评论 -
进程
定义:进程是由内核定义的抽象的实体,并为该实体分配用以执行程序和各项系统资源。从内核角度看,进程由用户内存空间和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码所使用的变量,而内核数据结构则用于维护进程状态信息。1、进程内存布局每个进程所分配的内存由多个部分组成,通常称之为段,主要有以下段:文本段 文本段包含进程运行的机器语言指令。具有只读属性,防止被意外修改。...原创 2018-03-12 08:59:01 · 225 阅读 · 0 评论 -
文件IO
一、概述 所有执行I/O操作的系统调用都以文件描述符,一个非负整数来指代打开的文件。文件描述符用以表示所有类型的已打开文件,包括管道,FIFO,socket,终端,设备和普通文件。本文主要介绍IO相关的接口。二、通用接口 通常,shell会替所有程序打开三种标准的文件描述符。如下表:文件描述符 用途 POSIX名称 stdio流0标准输入...原创 2018-03-17 15:25:40 · 315 阅读 · 0 评论 -
进程的创建和终止
1、概述 系统调用fork允许一个进程(父进程)创建一个新进程(子进程)。通过fork,子进程几乎是父进程的复制版本,子进程获得父进程的栈、数据段、堆和执行文本段的拷贝。通常,调用fork产生子进程后,子进程随便会调用execve函数簇执行新的任务,随后执行exit相关函数退出。而父进程则通常会调用wait函数等待子进程终止。 库函数exit(status)终止一进程,将进程占用的资源...原创 2018-03-30 11:04:26 · 1869 阅读 · 0 评论 -
监控文件事件
有时应用程序需要对某个文件或目录进行监控,以便判断是否发生了特定事件,比如文件删除、新增、修改等。典型例子就是文件管理应用。Linux自内核2.6.13起提供inotify机制供应用程序监控文件事件。1、概述使用inotify API有以下关键步骤:使用inotify_init()创建一个inotify实例,返回的文件描述符用于后续操作中指代该实例。使用inotify_add_...原创 2018-04-09 19:49:35 · 1006 阅读 · 0 评论 -
信号
1、概述 信号是事件发生时对进程的通知机制,有时也称之为软件中断,会中断程序的正常执行流程。进程能够向自己也可以向其它进程发送信号,多数情况下信号都是源于内核,引发内核产生信号的事件可能有以下几种:硬件发生异常。硬件异常的例子包括执行一条异常的机器语言指令,诸如被0除,引用无法访问的内存等。键入能产生信号的字符。如ctrl+c等发生了软件事件。比如子进程退出,定时器到期等。 ...原创 2018-05-17 14:45:56 · 301 阅读 · 2 评论 -
IO多路复用-select系统调用
一、IO多路复用 IO多路复用允许进程同时检查多个文件描述符,检查其中任意一个是否可以执行IO操作。有两个功能几乎相同的系统调用来执行IO多路复用,一是select,二是poll,历史上select的使用更为广泛。这两个系统调用可以检查普通文件、终端、伪终端、管道、FIFO、套接字等,允许进程要么一直等待文件描述符成为就绪态,要么指定一个超时时间。这里简单记录下select的使用二、se...原创 2018-06-20 15:33:15 · 581 阅读 · 0 评论