自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 博客摘录「 perf工具使用统计函数调用」2024年4月18日

性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果。

2024-04-18 11:43:09 65

转载 OS之memory大汇总

《操作系统》之内存篇(一)_操作系统形成物理地址是在哪个阶段_花事了哎的博客-CSDN博客《操作系统》之内存篇(二)-分段-分页_内存分段和分页-CSDN博客《操作系统》之内存篇(三)-分页的页表结构_花事了哎的博客-CSDN博客《操作系统》之内存篇(四)-虚拟内存_虚拟内存页面 父进程 、子进程 映射 的先后顺序-CSDN博客《操作系统》之内存篇(五)-页面置换_内存中被修改过的页面加入队列-CSDN博客《操作系统》之内存篇(六)-内存映射_操作系统内存映射文件-CSDN博客

2023-12-04 19:15:17 36

原创 AMBA 5 CHI 协议节点实例和读数据的来源

AMBA 5 CHI 协议节点实例和读数据的来源

2023-12-03 20:46:23 134

翻译 5.3 标准输入、标准输出和标准错误

    对一个进程预定义了3个流,并且这3个流可以自动地被进程使用,它们是:标准输入、标准输出和标准错误。这些流引用的文件与在3.2节中提到文件描述符STDIN_FILENO、STOUOT_FILENO和STDERR_FILENO所引用的相同。    这3个标准I/O流通过预定义文件指针stdin、stdout和stderr加以引用。这3个文件指针定义在头文件<stdio.h>中。...

2018-06-24 23:35:03 309

翻译 5.2 流和FILE对象

    在第3章中,所有I/O函数都是围绕文件描述符的。当打开一个文件时,即返回一个文件描述符,然后该文件描述符就用于后续的I/O操作。而对于标准I/O库,它们的操作时围绕流(stream)进行的(请勿将标准I/O术语与System V的STREAMS I/O系统相混淆,STREAMS I/O系统是System V的组成部分,Single UNIX Specification则将其标准化为XSI ...

2018-06-24 23:31:25 288

翻译 5.1 引言

    本章讲述标准I/O库。不仅是UNIX,很多其他操作系统都实现了标准I/O库,所以这个库由ISO C标准说明。Single UNIX Specification 对ISO C标准进行了扩充,定义了另外一些接口。    标准I/O库处理很多细节,如缓冲区分配、以优化的块长度执行I/O等。这些处理使用户不必担心如何选择使用正确的块长度(如3.9节中所述)。这使得它便于用户使用,但是如果我们不深入...

2018-06-24 23:05:08 201

翻译 4.25 文件访问权限位小结

    我们已经说明了所有文件访问权限位,其中某些位有多重用途。图4-26列出了所有这些权限位,以及它们对普通文件和目录文件的作用。

2018-06-24 19:32:37 213

翻译 4.24 设备特殊文件

    st_dev和st_rdev这两个字段经常引起混淆,在18.9节,我们编写ttyname函数时,需要使用这两个字段。有关规则很简单:每个文件系统所在的存储设备都由其主、次设备号表示。设备号所用的数据类型是基本系统数据类型dev_t。主设备号表示设备驱动程序,有时编码为与其通信的外设板;次设备号标识特定的子设备。回忆图4-13,一个磁盘驱动器经常包含若干个文件系统。在同一磁盘驱动器上的各文件...

2018-06-24 19:27:10 405

翻译 4.23 函数chdir、fchdir和getcwd

    每个进程都有一个当前工作目录,此目录是搜索所有相对路径名的起点(不以斜线开始的路径名为相对路径名)。当用户登录到UNIX系统时,其当前工作目录通常是口令文件(/etc/passwd)中该用户登录项的第6个字段----用户的起始目录(home directory)。当前工作目录是进程的一个属性,起始目录则是登录名的一个属性。    进程调用chdir或fchdir函数可以更改当前工作目录。#...

2018-06-24 19:11:36 308

翻译 4.22 读目录

    对某个目录具有访问权限的任意用户都可以读该目录,但是,为了防止文件系统产生混乱,只有内核才能写目录。回忆4.5节,一个目录的写权限位和执行权限位决定了在该目录中能否创建新文件以及删除文件,它们并不表示能否写目录本身。    目录的实际格式依赖于UNIX系统实现和文件系统的设计。早期的系统(如V7)有一个较简单的结构:每个目录项是16个字节,其中14个字节是文件名,2个字节是i节点编号。而对...

2018-06-24 18:50:48 209

翻译 4. 21 函数mkdir、mkdirat和rmdir

    用mkdir和mkdirat函数创建目录,用rmdir函数删除目录。#include <sys/stat.h>int mkdir(const char *pathname, mode_t mode);int mkdirat(int fd, const char * pathname, mode_t mode);                                  ...

2018-06-24 15:24:46 497

翻译 4.20 函数futimens、utimenstat和utimes

    一个文件的访问和修改时间可以用以下几个函数更改。futimens和utimenstat函数可以指定纳秒级精度的时间戳。用到的数据结构是与stat函数族相同的timespec结构(见4.2节)。#include <sys/stat.h>int  futimens(int fd, const struct timespec times[2]);int utimensat(int f...

2018-06-24 14:40:49 1299 1

翻译 4.19 文件的时间

    在4.2节中,我们讨论了Single UNIX Specification 2008版如何提高stat结构中时间字段的精度,从原来的秒提高到秒加上纳秒。每个文件属性所保存的实际精度依赖于文件系统的实现。对于把时间戳记录在秒级的文件系统来说,纳秒这个字段就会被填充为0.对于时间戳的记录精度高于秒级的文件系统来说,不足秒的值被转换成纳秒并记录在纳秒这个字段中。    对每个文件维护3个时间字段...

2018-06-24 14:12:23 207

翻译 4.18 创建和读取符号链接

    可以用symlink或symlinkat函数创建一个符号链接。#include <unstd.h>int symlink(const char * actualpath, const char * sympath);int symlinkat(const char * actualpath, const char * sympath);                     ...

2018-06-22 01:09:56 280

翻译 4.17 符号链接

    符号链接是对一个文件的间接指针,它与上一节所述的硬链接由所不同,硬链接直接指向文件的i节点。引入符号链接的原因是为了避开硬链接的一些限制。硬链接通常要求链接和文件位于同一文件系统中。只有超级用户才能创建指向目录的硬链接(在底层文件系统支持的情况下)。    对符号链接以及它指向何种对象并无任何文件系统限制,任何用户都可以创建指向目录的符号链接。符号链接一般用于将一个文件或整个目录结构移到系...

2018-06-21 23:39:05 349

翻译 4.16 函数rename和renameat

    文件或目录可以用rename函数或者renameat函数进行重命名。#include <stdio.h>int rename(const char * oldname, const char * newname);int renameat(int oldfd, const char *oldname, int newfd, const char *newpath);      ...

2018-06-20 23:39:16 883 1

翻译 4.15 函数link、linkat、unlink、unlinkat和remove

    如上节所述,任何一个文件可以有多个目录项指向其i节点。创建一个指向现有文件的链接的方法是使用link函数或linkat函数。#include <unistd.h>int link(const char *existingpath, const char * newpath);int linkat(int efd, const char *existingpath, int nf...

2018-06-19 23:27:49 990

翻译 4.14 文件系统

    为了说明文件链接的概念,先要介绍UNIX文件系统的基本结构。同时,了解i节点和指向i节点的目录项之间的区别也是很有益的。    目前,正在使用的UNIX文件系统有多种实现。例如,Solaris支持多种不同类型的磁盘文件系统:传统的基于BSD的UNIX文件系统(称为UFS),读、写DOS格式软盘的文件系统(称为PCFS),以及读CD的文件系统(称为HSFS)。在图2-20中,我们已经看到了不...

2018-06-19 23:01:24 284

翻译 4.13 文件截断

    有时我们需要在文件尾端处截去一些数据以缩短文件。将一个文件的长度截断为0是一个特例,在打开文件时使用O_TRUNC标志可以做到这一点。为了截断文件可以调用函数truncate和ftruncate.#include <unistd.h>int   truncate(const char * pathname, off_t length);int   ftruncate(inf f...

2018-06-19 22:32:32 730

翻译 4.12 文件长度

    stat结构成员st_size表示以字节为单位的文件的长度。此字段只对普通文件、目录文件和符号链接有意义。    对于普通文件,其文件长度可以是0,在开始读这种文件时,将得到文件结束(end-of-file)指示。对于目录,文件长度通常是一个数(16或512)的整倍数,我们将在4.22节中说明读目录操作。    对于符号链接,文件长度是在文件名中的实际字节数。例如,在下面的例子中,文件长度...

2018-06-13 00:16:01 382

翻译 4.11 函数chown、fchown、fchownat和lchown

    下面几个chown函数可用于更改文件的用户ID和组ID。如果两个参数owner或group中的任意一个是-1,则对应的ID不变。#include <unistd.h>int    chown(const char * pathname, uid_t owner, gid_t group);int   fchown(int fd, uid_t owner, gid_t group...

2018-06-13 00:09:10 708

翻译 4.10 粘着位

  S_ISVTX位由一段有趣的历史。在UNIX尚未使用请求分页式技术的早期版本中,S_ISVTX位被称为粘着位。如果一个可执行程序文件的这一位被设置了,那么当程序第一次被执行,在其终止时,程序正文部分的一个副本仍被保存在交换区(程序的正文部分时机器指令)。这使得下次执行该程序时能较快地将其装载入内存。其原因是:通常的UNIX文件系统中,文件的各数据块很可能是随机存放的,相比较而言,交换区是被作为...

2018-06-12 23:48:14 293

翻译 4.9 函数chmod、fchmod和fchmodat

    chmod、fchmod和fchmodat这3个函数使我们可以更改现有文件的访问权限。#include <sys/stat.h>int chmod(const char *pathname, mode_t mode);int fchmod(int fd, mode_t mode);int fchmodat(int fd, const char *pathname, mode_t...

2018-05-28 00:02:45 562

翻译 4.8 函数umask

   至此我们已说明了与每个文件相关联的9个访问权限位,在此基础上我们可以说明与每个进程相关联的文件模式创建屏蔽字。    umask函数为进程设置文件模式创建屏蔽字,并返回之前的值。(这是少数几个没有出错返回函数中的一个。)#include <sys/stat.h>mode_t umask(mode_t cmask);                                 ...

2018-05-27 02:13:09 216

翻译 4.7 函数accesss和faccessat

   正如前面所说,当用open函数打开一个文件时,内核以进程鹅有效用户ID和有效组ID为基础执行其访问权限测试。有时,进程也希望按其实际用户ID和实际组ID来测试其访问能力。例如,当一个进程使用设置用户ID或设置组ID功能作为另一个用户(或组)运行时,就可能会有这种需要。即使一个进程可能已经通过设置用户ID以超级用户权限运行,它仍可能想验证其实际用户能否访问一个给定的文件。access和facc...

2018-05-22 00:31:49 1337

翻译 4.6 新文件和目录的所有权

     在第3章中讲述用open或creat创建新文件时,我们并没有说明赋予新文件的用户ID和组ID是什么。4.21节将说明mkdir函数,此时就会了解如何创建一个新目录。关于新目录的所有权规则与本节说明的新文件所有权规则相同。     新文件的用户ID设置为进程的有效用户ID。关于组ID,POSIX.1允许实现选择下列之一作为新文件的组ID。    (1)新文件的组ID可以是进程的有效组ID。...

2018-05-21 22:14:32 166

翻译 4.5 文件访问权限

    st_mode值也包含了对文件的访问权限。当提及文件时,指的是前面所提到的任何类型的文件。所有文件类型(目录、字符特别文件等)都有访问权限(access permission)。很多人认为只有普通文件有访问权限,这是一种误解。    每个文件都有9个访问权限位,可将它们分成3类,见图4-6.st_mode屏蔽     含义 S_IRUER S_IWUSR S_IXUSR 用户读 ...

2018-05-10 00:50:47 343

翻译 4.4 设置用户ID和设置组ID

与一个进程相关联的ID有6个活更多,如图4-5所示。实际用户ID            我们实际上是谁        实际组  ID有效用户ID有效组ID                用于文件访问权限检查附属组ID                保存的设置用户ID保存的设置组            由exec函数保存实际用户ID和实际组ID标识我们究竟是谁。这两个字段在登录时取自口令文件中的登录...

2018-05-07 22:12:26 283

翻译 4.3 文件类型

  至此我们已经介绍了两种不同的文件类型:普通文件和目录。UNIX系统的大多数文件时普通文件或目录,但是也有另外一些文件类型。文件类型包括如下几种。    (1)普通文件(regular file)。这是最常用的文件类型,这种文件包含了某种形式的数据。至于这种数据是文本还是二进制数据,对于UNIX内核而言并无区别。对普通文件内容的理解由处理该文件的应用程序进行。    (2)目录文件(direct...

2018-05-06 23:02:52 221

翻译 4.2 函数stat、fstat、fstatat和lstat

   本章主要讨论4个stat函数以及它们的返回信息。#include <sys/stat.h>int stat(const char *restrict pathname, struct stat * restrict buf);int fstat(int fd, struct stat* buf);int lstat(const char *restrict pathname, s...

2018-05-06 22:45:15 334

翻译 4.1 引言

   上一章我们说明了执行I/O操作的基本函数,其中的讨论是围绕普通文件I/O进行的---打开文件、读文件或写文件。本章将描述文件系统的其他特征和文件的性质。我们将从stat函数开始,逐个说明stat结构的每一个成员以了解文件的所有属性。在此过程中,我们将说明修改这些属性的各个函数(更改所有者、更改权限等),还将更详细地说明UNIX文件系统的结构以及符号链接。本章最后介绍对目录进行操作的各个函数,...

2018-05-06 22:31:35 155

翻译 第3章 文件I/O

3.16 /dev/fd    较新的系统都提供名为/dev/fd的目录,其目录项是名为0、1、2等的文件。打开文件/dev/fd等效于复制描述符n。    在下列函数调用中:    fd = open("/dev/fd/0", mode);大多数系统忽略它所指定的mode,而另外一些系统则要求mode必须是所引用的文件(在这里是标准输入)初始打开时所使用的打开模式的一个子集。因为上面的打开等效于...

2018-05-03 23:46:18 100

翻译 第3章

3.15 函数ioctl    ioctl函数一直是I/O操作的杂物箱。不能用本章中其他函数表示的I/O操作通常都能用ioctl表示。终端I/O是使用ioctl最多的地方。#include <unistd.h>#include <sys/ioctl.h>int ioctl(int fd, int request, ...);                         ...

2018-05-03 23:29:55 143

翻译 第3章 文件I/O

3.14 函数fcntl   fcntl函数可以改变已经打开文件的属性。#include <fcntl.h>int  fcntl(int fd, int cmd, ... /* int arg */);                                                                                返回值:若成功,则依赖于c...

2018-04-22 22:00:17 116

翻译 第3章 文件I/O

3.13 函数sync、fsync和fdatasync   传统的UNIX系统实现在内核中设有缓冲区高速缓存或页高速缓存,大多数磁盘I/O都通过缓冲区进行。当我们向文件写入数据时,内核通常先将数据复制到缓冲区中,然后排入队列,晚些时候再写入磁盘。这种方式被称为延迟写。   通常,当内核需要重用缓冲区来存放其他磁盘快数据时,它会把所有延迟写数据块写入磁盘。为了保证磁盘上实际文件系统与缓冲区中内容的一...

2018-04-22 01:41:41 92

翻译 第3章 文件I/O

3.12 函数dup和dup2下面两个函授都可用来复制一个现有的文件描述符。#include <unistd.h>int dup(int fd);int dup2(int fd, int fd2);                                                                  量函数的返回值:若成功,返回新的文件描述符;若出错,返回-...

2018-04-20 23:38:27 135

翻译 第3章 文件I/O

3.11 原子操作1、追加到一个文件      考虑一个进程,它要将数据追加到一个文件尾端。早期的UNIX系统版本并不支持open的O_APPEND选项,所以程序被编写成下列形式:if (lseek(fd, OL, 2) < 0)    err_sys("lseek error");if (write(fd, buf, 100) != 100)   err_sys("write error"...

2018-04-18 23:40:26 180

翻译 第3章 文件I/O

3.10 文件共享     UNIX系统支持在不同进程间共享打开文件。在介绍dup函数之前,先要说明这种共享。为此先介绍内核用于所有I/O的数据结构。   内核使用3种数据结构表示打开文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。   (1)每个进程在进程表中都有一个记录项,记录项中包含一张打开文件描述符表,可将其视为一个矢量,每个描述符占用一项。与每个文件描述符相关...

2018-04-16 23:24:59 113

翻译 第3章 文件I/O

3.9 I/O效率图3-5程序只使用read和write函数复制一个文件。程序略。关于该程序应注意以下几点。它从标准输入读,写至标准输出,这就假定在执行本程序之前,这些标准输入、输出已由shell安排好。确实,所有常用的UNIX系统shell都提供一种方法,它在标准输入上打开一个文件用于读,在标准输出上创建(或重写)一个文件。这使得程序不必打开输入和输出文件,并允许用户利用shell的I/O重定向...

2018-04-12 23:29:46 93

翻译 第3章 文件I/O

3.8 函数read调用read函数向打开文件写数据。#include <unistd.h>ssize_t write(int fd, const void *buf, size_t nbytes);                                                                                 返回值:若成功,返回已写的...

2018-04-10 22:27:56 111

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除