以下是为您整理出来关于episode合集内容,如果觉得还不错,请帮忙转发推荐。
趁着在家里,开始学习APUE(Unix环境高级编程)第三版。 首先是下载源代码,在Ubuntu下,直接输入 make 提示缺少一个lbsd的东西,输入: sudo apt install libbsd-dev 然后写了第一个示例程序,关于ls的。 接着在lib……
文件描述符 文件描述符(file descriptor)通常是一个小的非负整数,内核用一个标识一个特定进程正在访问的文件。当内核打开一个现有文件或创建一个新文件时,它都返回一个文件描述符。在读、写文件时,可以使用这个文……
1.程序 程序是一个存储在磁盘上某个目录中的可执行文件。内核使用exec函数(7个exec函数之一),将程序读入内存,并执行内存。 2.进程和进程ID 程序的执行实例被称为进程。 UNIX系统确保每个进程都有一个唯一的数字标……
文件<errno.h>中定义了errno以及可以赋予他的各种常量。这些常量都以字符E开头。另外,UNIX系统手册第2部分的第1页,intro(2)列出了所有这些出错常量。 第一个规则 如果没有出错,其值不会被例程清除。因此,仅……
用户ID 口令文件登录项中的用户ID(user ID)是一个数值,他向系统标识各个不同的用户。系统管理员在确定一个用户的登录名的同时,确定其用户ID。用户不能改变其用户ID。通常每个用户有一个唯一的用户ID。 用户ID为0……
信号(signal)用于通知进程发生了某种情况。进程有以下3种处理信号的方式: (1). 忽略信号。有些信号表示硬件异常。因为这些异常产生的后果不确定,所以不推荐使用这种处理方式。 (2). 按照系统默认方式处理。 (3).……
日历时间。该值是自协调世界时(Coordinated Universal Time, UTC) 1970年1月1日00:00:00这个特定时间以来所经过的秒数累计值。 系统基本数据类型time_t用于保存这种时间值。 进程时间。也被称为CPU时间,用以度量进……
系统调用接口总是在《UNIX程序员手册》的第2部分中说明,是用C语言定义的,与具体系统如何调用一个系统调用的实现技术无关。这与很多早期的操作系统不同,哪些系统按传统方式用机器的汇编定义内核入口点。 UNIX所使用……
简要回归一下Unix的标准化过程 ISO C 本书依旧使用1999年版本。 目前GCC已经更新到7.2,8.0仍在开发当中。 IEEE POSIX POSIX指的是可移植操作系统接口(Portable Operating System Interface)。 目前所有Linux主要发……
获得运行时限制函数 #include <unistd.h> long sysconf(int name); long pathconf(const char *pathname, int name); long fpathconf(int fd, int name); (1)如果name参数并不是一个合适的常量,这3个函数都返……
功能测试宏 POXIS.1标准的早期版本定义_POXIS_SOURCE常量。在POXIS.1的2001版中,他被替换为_POXIS_C_SOURCE。 _POXIS_C_SOURCE及_XOPEN_SOURCE被称为功能测试宏(feature test macro)。所有功能测试宏都以下划线开始……
从今天开始学习UNIX系统,可用的文件I/O函数——打开文件、读文件、写文件等。5个函数:open、read、write、lseek以及close。不同缓冲长度对read和write函数的影响。 不带缓冲的I/O unbuffered I/O,与标准I/O函数相……
文件共享 内核使用3中数据结构表示打开文件,他们之间的关系决定了文件共享方面的一个进程对另一个进程可能产生的影响。 (1)每个进程在进程表中都有一个记录项,记录项中包含一张打开文件描述表,可将其视为一个矢……
#include "apue.h" #include <fcntl.h> int main(int argc, char *argv[]) { int val; if(argc!=2) { err_quit("usage: a.out <descriptor#>"); } if((……
函数stat、fstat、fstatat和lstat 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 path……
stat结构成员st_size表示以字节为单位的文件长度。此字段值对普通文件、目录文件和符号链接有意义。 truncate和fruncate是文件截断函数。 #include <unistd.h> int truncate(const char *pathname, off_t len……
rename和renameat函数 #include <stdio.h> int rename(const char *oldname, const char *newname); int renameat(int oldfd, const char *oldname, int newfd, const char *newname); 引入符号链接的原因是为……
#include "apue.h" #include <dirent.h> #include <limits.h> typedef int Myfunc(const char *, const struct stat *, int); static Myfunc myfunc; static int myftw(char *, Myfunc *); st……
进程调用chdir或fchdir函数可以更改当前工作目录 #include <unistd.h> int chdir(const char *pathname); int fchdir(int fd); 在这两个函数中,分别用pathname或打开文件描述符来指定新的当前工作目录。 #in……
这一章讲述了I/O库。很多其他操作系统都实现了标准I/O库,这个库由ISO C标准说明。Single UNIX specification对ISO C标准进行了扩充,定义另外一些接口。 35年来,几乎没有对标准I/O库进行修改 freopen函数清除一个流……
一旦打开了流,有三种方式。 (1)每次一个字符的I/O。 (2)每次一行的I/O。 (3)直接I/O。 直接I/O(direct I/O)这个属于来自ISO C标准,有时也被称为:二进制I/O、一次一个对象I/O、面向记录的I/O或面向结构的I……
二进制I/O #include <stdio.h> size_t freed(void *restrict ptr, size_t size, size_t nobj, FILE *restrict fp); size_t fwrite(const void *restrict ptr, size_t size, size_t nobj, FILE *restrict fp);……
#include "apue.h" int main(void) { FILE *fp; fputs("enter any character\n",stdout); if(getchar()==EOF) err_sys("getchar error"); fputs("one li……
临时文件 提供了两个函数以帮助创建临时文件。 #include <stdio.h> char *tmpnam(char *ptr); FILE *tmpfile(void); 嘴多调用次数是TMP_MAX。TMP_MAX定义在 <stdio.h>中。 #include "apue.h" ……
内存流 #include <stdio.h> FILE *fmemopen(void *restrict buf, size_t size, const char *restrict type); type参数控制如何使用流。 type 说明 r或rb 为读而打开 w或wb 为写而打开 a或ab 追加:为在第一个……
口令文件 UNIX系统口令文件(POSIX.1则将其称为用户数据库)包含了下列表格所示的各字段,这些字段包含在<pwd.h>中定义的passwd结构中。 注意,POSIX.1只指定passwd结构包含的10个字段中的5个。大多数平台至少……