
APUE笔记
何以慰風塵
本愿一心向胡马,奈何胡马奔沟渠
展开
-
进程关系
一.终端登录1.终端登录(硬件相连的终端)Linux系统管理者可以创建名为/etc/inittab的文件,其中每一行对应了一个终端设备,当系统启动时,init进程会为每一个允许登陆的终端设备都调用一次fork,并exec getty程序,该程序会调用open函数打开终端设备,并等待用户输入用户名。当用户输入用户名后,getty程序调用execle,执行login程序。该程序等待用户输入正确...原创 2018-11-30 09:26:27 · 237 阅读 · 0 评论 -
进程间通信(IPC)
一.管道(未命名管道) 管道是一种IPC方式,它具有两点局限性,第一点是由于管道在最初是一种半双工的进程间通信方式,虽然有的系统允许通过管道进行全双工通信,但是为了可移植性不应做这种假设。第二点是管道只能在具有公共祖先的两个进程之间通信(那用户创建的进程不都有公共祖先init进程?所以该公共祖先还应该创建了管道,这样子进程才能继承引用该管道的文件描述符)。1.管道的创建pipe...原创 2018-12-07 08:47:35 · 536 阅读 · 2 评论 -
进程控制
一.进程标识 Linux中用进程标识符process ID(PID)来唯一的标识一个进程或轻量级进程(Linux中没有真正的线程,而是通过线程组或可以称为轻量级进程组实现的多线程进程)。PID被存放在进程描述符的pid字段中,还有一个字段较tgid用于标识一个进程组,即该组中的所有轻量级进程的线程组ID相同,其值等于领头轻量级进程的PID。我们常用的getpid函数返回的便是进程的t...原创 2018-11-29 19:24:09 · 277 阅读 · 0 评论 -
线程
一.概述 Linux中用进程标识符process ID(PID)来唯一的标识一个进程或轻量级进程(Linux中没有真正的线程,而是通过线程组或可以称为轻量级进程组实现的多线程进程)。PID被存放在进程描述符的pid字段中,还有一个字段较tgid用于标识一个进程组,即该组中的所有轻量级进程的线程组ID相同,其值等于领头轻量级进程的PID。我们常用的getpid函数返回的便是进程的tg...原创 2018-12-01 21:07:58 · 240 阅读 · 0 评论 -
进程环境
一.程序的启动与终止1.程序的启动 当内核要指向一个C程序时,会先启动一个启动例程,启动例程从内核取得命令行参数和环境变量的值,然后准备调用main函数。启动例程一般为会变语言编写,但若以C代码描述则为以下形势:exit(main(argc,argv));由此亦可看出当程序中main函数中以return num退出,则会回到启动例程,并根据终止码调用exit。2.进程...原创 2018-11-28 15:56:17 · 294 阅读 · 0 评论 -
系统数据文件和系统信息
一.口令文件 口令文件(/etc/passwd)包含了用户的信息,如用户名,用户ID,登陆密码等。由于该文件人人可见,因此,登陆密码只是一个占位符x,真正的登陆密码在其他文件中。可通过vi查看口令文件,如下图所示: 为了阻止某用户登录系统,可以将/bin/bash改为bin/fa...原创 2018-11-27 21:44:40 · 360 阅读 · 0 评论 -
标准I/O
一.流的概念与FILE 当我们使用标准I/O库打开或创建一个文件时,便会将一个流与该文件相关联。那么什么是流呢?流这个词可以让我们联想到河道里的流水,其实这可以很形象的比喻出我们要讨论的流。标准在输入与文件之间增加了一个缓冲区,这就相当于是河道,而数据便是河道中的流水。而这个河道的宽度,长度,目的地便是通过FILE对象来维护的,FILE结构中包含:文件描述符,指向该流的缓冲区的指针,缓...原创 2018-11-27 19:09:43 · 407 阅读 · 0 评论 -
文件访问
一.文件的创建 创建文件一般使用open/openat,这两个函数比crate更加灵活,因为这两个函数可以指定打开标志,而create以只写方式打开创建的文件。在众多打开标志中选取4个标志进行说明,O_CLOEXEC选项用于将FD_CLOEXEC置为文件描述符标志,即当执行exec函数启动某程序后是否关闭该描述符;O_SYNC 选项启用时,在该文件描述符上调用write函数会等待物...原创 2018-11-27 14:34:24 · 510 阅读 · 0 评论 -
信号
一.概述 信号是一种软件中断,它提供了一种处理异步事件的方法。LInux中定有了31种不同的信号,且支持应用程序定义信号。1.产生信号的几种情况 有很多条件可以产生信号,以下便是常见的几种。当用户按下某些中断按键时,会引发终端产生信号。比如在终端上使用ctrl + c 通常会产生中断信号(SIGINT),这可以停止一个程序 硬件异常产生信号。比如:除数为...原创 2018-12-01 14:16:26 · 375 阅读 · 0 评论 -
高级I/O
一.非阻塞I/O 非阻塞I/O可以防止在进行慢系统调用时被阻塞,当这种操作不能立即完成时将立即返回,并设置相关错误码。如在一个非阻塞的描述符上调用read,若无数据可读,则read返回-1,errno设置为EAGAIN。 可以通过以下几种方式设置非阻塞描述符:调用open时指定O_NONBLOCK标志。 调用socket时指定SOCK_NONBLOCK创建套接...原创 2018-12-05 17:03:26 · 352 阅读 · 0 评论