Linux学习
文章平均质量分 95
Linux学习
Vainxxxx
这个作者很懒,什么都没留下…
展开
-
LinuxUNIX系统编程手册——(十四)系统编程概念
设备专用文件与系统的某个设备相对应。在内核中,每种设备类型都有与之相对应的设备驱动程序,用来处理设备的所有 I/O 请求。设备驱动程序属内核代码单元,可执行一系列操作,(通常)与相关硬件的输入/输出动作相对应。由设备驱动程序提供的 API 是固定的,包含的操作对应于系统调用 open()、close()、read()、write()、mmap()以及 ioctl()。每个设备驱动程序所提供的接口一致,这隐藏了每个设备在操作方面的差异,从而满足了 I/O 操作的通用性。可将设备划分为以下两种类型。原创 2024-07-30 11:04:32 · 709 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(十五)文件属性
利用系统调用 stat()、lstat()以及 fstat(),可获取与文件有关的信息,其中大部分提取自文件 i 节点。以上 3 个系统调用之间仅有的区别在于对文件的描述方式不同。系统调用 stat()和 lstat()无需对其所操作的文件本身拥有任何权限,但针。而只要供之以有效的文件描述符,fstat()系统调用总是成功。原创 2024-08-02 11:25:17 · 701 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(十三)文件IO缓冲
write()随即返回。在后续某个时刻,内核会将其缓冲区中的数据写入(刷新至)磁盘。(因此,可以说系统调用与磁盘操作并不同步。)如果在此期间,另一进程试图读取该文件的这几个字节,那么内核将自动从缓冲区高速缓存中提供这些数据,而不是从文件中(读取过期的内容)。与此同理,对输入而言,内核从磁盘中读取数据并存储到内核缓冲区中。read()调用将从该缓冲区中读取数据,直至把缓冲区中的数据取完,这时,内核会将文件的下一段内容读入缓冲区高速缓存。(这里的描述有所简化。原创 2024-07-25 15:54:20 · 718 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(十二)系统和进程信息
为了提供更为简便的方法来访问内核信息,许多现代 UNIX 实现提供了一个/proc 虚拟文件系统。该文件系统驻留于/proc 目录中,包含了各种用于展示内核信息的文件,并且允许进程通过常规文件 I/O 系统调用来方便地读取,有时还可以修改这些信息。之所以将/proc 文件系统称为虚拟,是因为其包含的文件和子目录并未存储于磁盘上,而是由内核在进程访问此类信息时动态创建而成。原创 2024-07-25 10:12:02 · 931 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(十)时间
系统没有将时区信息直接编码于程序或函数库中,而是以标准格式保存于文件中,并加以维护。这些文件位于目录/usr/share/zoneinfo 中。该目录下的每个文件都包含了一个特定国家或地区内时区制度的相关信息,且往往根据其所描述的时区来加以命名,诸如CST(中国标准时间)、EST(美国东部标准时间)、CET(欧洲中部时间)、UTC、Turkey 和 Iran。系统的本地时间由时区文件/etc/localtime 定义,通常链接到/usr/share/zoneinfo 下的一个文件。原创 2024-07-24 22:12:01 · 883 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(九)进程凭证
char * p;if(getresuid(& ruid , & euid , & suid) == - 1) /* 获取实际、有效和保存设置用户ID */ errExit("getresuid");if(getresgid(& rgid , & egid , & sgid) == - 1) /* 获取实际、有效和保存设置组ID */ errExit("getresgid");/* 将文件系统用户ID设置为0,并记录之前的文件系统用户ID */ fsgid = setfsgid(0);原创 2024-07-24 10:18:00 · 953 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(八)用户和组
每个用户都拥有一个唯一的用户名和一个与之相关的数值型用户标识符(UID)。用户可以隶属于一个或多个组。而每个组也都拥有唯一的一个名称和一个组标识符(GID)。用户和组 ID 的主要用途有二:其一,确定各种系统资源的所有权;其二,对赋予进程访问上述资源的权限加以控制。原创 2024-07-23 15:06:50 · 1002 阅读 · 0 评论 -
必须掌握的Linux命令
id 命令用于显示用户的详细信息,语法格式为id 用户名。原创 2024-07-23 18:46:35 · 789 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(七)内存分配
进程可以通过增加堆的大小来分配内存,所谓堆是一段长度可变的连续虚拟内存,始于进程的未初始化数据段末尾,随着内存的分配和释放而增减。通常将堆的当前内存边界称为“program break”。原创 2024-07-22 23:15:23 · 597 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(六)进程
进程是一个可执行程序的实例。程序是包含了一系列信息的文件,这些信息描述了如何在运行时创建一个进程,所包括的内容如下所示。进程是由内核定义的抽象的实体,并为该实体分配用以执行程序的各项系统资源。从内核角度看,进程由用户内存空间(user-space memory)和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码所使用的变量,而内核数据结构则用于维护进程状态信息。原创 2024-07-22 11:18:00 · 784 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(五)深入探究文件IO
原子性是某些操作得以圆满成功的关键所在。特别是它规避了竞争状态(race conditions)(有时也称为竞争冒险)。是这样一种情形:操作共享资源的两个进程(或线程),其结果取决于一个无法预期的顺序,即这些进程或线程获得 CPU 使用权的先后相对顺序。接下来两个小节,将讨论涉及文件 I/O 的两种竞争状态,并展示了如何使用 open()的标志位,来保证相关文件操作的原子性,从而消除这些竞争状态。原创 2024-07-21 22:56:49 · 889 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(三)系统编程概念
以应用程序编程接口(API)的形式,内核提供有一系列服务供程序访问。这包括创建新进程、执行 I/O,以及为进程间通信创建管道等。在深入系统调用的运作方式之前,务必关注以下几点。从编程角度来看,系统调用与 C 语言函数的调用很相似。但是在执行系统调用会有步骤。书中按事件发生的顺序对这些步骤加以分析。1、应用程序通过调用 C 语言函数库中的2、通过堆栈,系统调用参数传入外壳函数,但内核却希望将这些参数置入特定寄存器。因此,外壳函数会将上述参数复制到寄存器。原创 2024-07-19 19:23:41 · 713 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(四)文件IO:通用的IO模型
所有执行 I/O 操作的系统调用都以文件描述符,一个非负整数(通常是小整数),来指代打开的文件。文件描述符用以表示所有类型的已打开文件,包括管道(pipe)、FIFO、socket、终端、设备和普通文件。大多数程序都期望能够使用 3 种标准的文件描述符,见下表。文件描述符用途POSIX名称stdio流0标准输入stdin1标准输出stdout2标准错误stderr。原创 2024-07-20 17:29:31 · 849 阅读 · 0 评论 -
LinuxUNIX系统编程手册——(二)基本概念
术语“操作系统”通常包含两种不同含义。指完整的软件包,这包括用来管理计算机资源的核心层软件,以及附带的所有标准软件工具,诸如命令行解释器、图形用户界面、文件操作工具和文本编辑器等。在更狭义的范围内,是指管理和分配计算机资源(即CPU、RAM和设备)的核心层软件。术语“内核”通常是第二种含义,本书中的“操作系统”一词也是这层意思。原创 2024-07-19 17:31:06 · 765 阅读 · 0 评论