apue串讲
文章平均质量分 89
apue系统编程API
infralan
Major in 存储, 周边:linux内核 虚拟化 云原生,分布式、网络、数据库
展开
-
Linux系统编程学习笔记(三)高级文件I/O
Linux系统编程学习笔记(三)高级文件I/O高级文件I/O1、Linux提供的高级I/O操作:Scatter/gatter I/O:可以通过单个系统调用从多个buffer写到文件或者读到多个buffer中。Epoll:是poll()和select()的改进版。Memory-mapped I/O:将一个文件映像到内存,通过内存的操作来操作文件,操作更高效简单。File advice:允许进程向内核提供使用的场景来优化I/O效率。异步I/O:允许进程发出I/O请求后不等待操作完成返回。2、原创 2021-06-30 15:11:11 · 348 阅读 · 0 评论 -
Linux系统编程学习笔记(七)信号
信号1信号是提供处理异步事件机制的软件中断。这些事件可以来自系统外部–例如用户产生中断符(通常是Ctrl+c),或者来自程序或者内核内部的活动,例如进程执行除以0的代码。作为一种进程间通信的基本形式,进程也可以给另一个进程发信号。不光事件的发生是异步的,而且程序对信号的处理也是异步的。信号处理函数在内核中注册,收到信号时,内核从程序的其它部分异步地调用信号处理函数。 信号很早就是Unix的一部分,但是早期的信号时不可靠的,可能会出现丢失的情况。后来不同的Unix对信号做了不同的改进,出现了兼容性问题。但原创 2021-06-30 16:37:33 · 205 阅读 · 0 评论 -
Linux系统编程学习笔记(五)进程管理
进程管理(一)和文件一样,进程是Unix系统最基本的抽象之一。1、进程ID:每一个进程都有一个唯一的标示,进程ID。虽然进程ID是唯一的,但进程终止后,id会被其他进程重用。许多UNIX都提供了延迟重用的功能,以防止新进程被误认为是旧进程。有一些特殊的进程:id为0的进程–idle进程或者叫做swapper,通常是一个调度进程。id为1的进程–内核booting之后执行的第一个进程。init进程一般执行的是init程序。Linux通常尝试执行以下init程序:1、/sbin/init: 偏原创 2021-06-30 15:42:00 · 211 阅读 · 0 评论 -
Linux系统编程学习笔记(九)进程间通信IPC
进程间通信IPC:我们以前介绍过进程控制原语,看到怎么创建多个进程。但是进程之间交互信息的方式只介绍了通过fork或者exec继承父进程的打开文件或者通过文件系统。经典的进程通信方式有:管道、FIFOs,消息队列,信号量和共享内存。1、管道:管道是Unix系统IPC最古老的形式,PIPE有以下限制:1)是半双工的,一些系统提供了全双工的管道,但是为了可移植性,我们最好不要作此假设。2)管道只能在有共同祖先的进程之间。一般一个进程创建一个管道,然后进程调用fork,然后管道在父进程和子进程之间使用原创 2021-07-01 12:03:38 · 161 阅读 · 0 评论 -
Linux系统编程学习笔记(八)信号
信号2:1、信号集合:信号集合以及其操作我们经常遇到,比如设置一些进程要阻塞的信号,进程的信号pending集合。以下是常用的信号操作:#include <signal.h> int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set, int signo); int sigdelset(sigset_t *set, int signo);原创 2021-06-30 23:54:19 · 227 阅读 · 0 评论 -
Linux系统编程学习笔记(四)文件和目录管理
Linux系统编程学习笔记(四)文件和目录管理文件和目录管理:1、获得文件metadata的Stat家族:#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int lstat(const char * restrict path, struct stat * restrict buf); int stat(const char *restrict path, str原创 2021-06-30 13:15:59 · 186 阅读 · 0 评论 -
Linux系统编程学习笔记(十)守护进程
守护进程:守护进程是生存时间比较长的一种进程. 它们常常在系统自举时启动, 仅在系统关闭时才终止. 因为它们没有控制终端,所以说它们是在后台运行的.1、 常见守护进程先来介绍一些Linux系统常见的守护进程:init: 它的pid为1, 是系统守护进程, 负责启动系统服务, 这些服务通常自己也拥有守护进程.keventd: 为在内核中运行计划执行的函数提供进程上下文.kapmd: 对计算机系统中具有的高级电源管理提供支持.kswapd: 页面调出守护进程(Pageout Daemon), 它通原创 2021-07-01 12:38:02 · 252 阅读 · 0 评论 -
Linux系统编程学习笔记(二)C标准I/O库
Linux系统编程学习笔记(二)C标准I/O库标准I/O标准IO就是不依赖系统,提供更多的一层抽象,所以是跨平台的。当然也会有自己的包装,包括自带的buffer。Buffered I/O:Buffered I/O可以减少系统调用的次数,提高性能。每次读一个block的整数倍可以提高效率。1、Standard I/O:C语言的标准IO库stdio,提供了跨平台的,user-buffering的方案。2、文件指针:标准I/O不直接操作文件描述符,而是使用文件指针来操作文件。FILE *fp打开原创 2021-06-30 14:43:14 · 141 阅读 · 0 评论 -
Linux系统编程学习笔记(一)File I/O
Linux系统编程学习笔记(一)File I/OFile I/O1、打开文件int open(const char *name, int flags); int open(const char *name,int flags, mode_t mode); flags:必须是O_RDONLY,O_WRONLY,ORDWR之一加上其他选项:O_APPEND:append方式O_ASYNC:终端和socket文件可用,默认产生SIGIO信号O_CREAT:不存在则创建,已经存在则不起作用如果原创 2021-06-30 13:14:38 · 379 阅读 · 0 评论 -
Linux系统编程学习笔记(十一)线程
线程线程和进程类似,但是线程之间能够共享更多的信息。一个进程中的所有线程可以共享进程文件描述符和内存。有了多线程控制,我们可以把我们的程序设计成为在一个进程同时做多个任务,每一个线程做一个独立的任务,这种方式可以有以下好处:通过把每一个事件分配给一个线程处理,可以简化异步事件处理的代码。每一个线程可以用同步编程模型,而同步编程要比异步编程简单的多。多个进程需要使用复杂的机制来共享内存和文件描述符。而线程可以自动共享同一内存地址空间和文件描述符。有一些问题可以划分以便提高这个程序的吞吐量。一个进程如原创 2021-07-01 14:48:58 · 248 阅读 · 0 评论 -
Linux系统编程学习笔记(六) 内存管理
内存管理:对于一个进程来说,内存是最基本的也是最重要的资源之一。内存管理包括:内存分配、内存操作和内存释放。1、进程地址空间:Linux将物理内存虚拟化,内核为每一个进程维护一个特殊的虚拟地址空间。这个地址是线性的,从0开始,到某个最大值。1)页和页面调度虚拟地址空间由很多页组成。系统的体系结构和机型决定了页的大小,典型的页大小包括4kb(32位系统) 和8k(64位系统)。每个页面都只有无效和有效两种状态:一个有效的页面和一个物理页或者一个二级存储 介质相关联(一个交换分区或者一个硬盘文件),一原创 2021-06-30 16:24:39 · 353 阅读 · 0 评论 -
Linux系统编程学习笔记(十二)线程
线程2线程1中我们介绍了线程和线程同步,本部分将学习线程控制的细节。我们将要看到线程属性、同步原语属性,线程私有数据。1、线程限制:Single Unix定义了一线线程操作的限制,和其他的限制一样,可以通过sysconf来查询。和其它的限制使用目的一样,为了应用程序的在不同操作系统的可移植性。一些限制:PTHREAD_DESTRUCTOR_ITERATIONS: 销毁一个线程数据最大的尝试次数,可以通过_SC_THREAD_DESTRUCTOR_ITERATIONS作为sysconf的参数查询。原创 2021-07-01 15:12:15 · 248 阅读 · 0 评论