《linux环境高级编程》学习笔记
文章平均质量分 70
周老五
纯粹爱好
展开
-
fpathconf函数
fpathconf函数原型如下:#include long fpathconf(int files, int name);与pathconf函数功能一样,只是第一个参数不一样,pathconf的第一个参数pathname是路径名,数据类型是字符数组指针,而fpathconf的第一个参数files是一个已打开文件的文件标识符,数据类型是一个整数。两个函数的第二个参数name完全一样原创 2013-11-01 00:17:30 · 2306 阅读 · 0 评论 -
4.2 fstat函数-读取文件属性
stat函数用于获取文件的属性信息(例如文件类型、访问权限和访问时间等)。函数原型如下:#include int fstat(int filedes, struct stat *restrict buf);其中struct sata结构定义在文件中。返回值:成功返回0,出错返回-1。参数:1、filedes已打开的文件描述符。2、buf存储struct stat结构信原创 2013-11-03 01:34:59 · 835 阅读 · 0 评论 -
3.4 creat函数-创建文件
creat函数用于创建一个新文件。函数原型如下:#include int creat(const char *pathname, mode_t mode);返回值:成功则返回为只写打开的文件描述符,若出错则返回-1。参数:pathname 要创建的文件路径或文件名。mode 文件创建模式字。creat可以被open(pathname, O_WRONLY | O原创 2013-11-03 00:10:52 · 1444 阅读 · 0 评论 -
3.14 fcntl函数(2)-利用F_GETFL参数值获取文件读写状态
fcntl函数可以改变已打开文件的性质。函数原型如下:#include int fcntl(int filedes, int cmd, ...);当第二个参数cmd=F_GETFL时,它的作用是取得文件描述符filedes的文件状态标志。当第二个参数cmd=F_SETFL时,它的作用是设置文件描述符filedes的文件状态标志,这时第三个参数为新的状态标志。返回值原创 2013-11-02 23:07:15 · 14284 阅读 · 0 评论 -
3.11 pwrite函数-文件原子写
平write函数用于从打开文件的指定位置处写入指定字节的数据。,函数原型如下:#include ssize_t pwrite(int filedes, const void *buf, size_t nbytes, off_t offset);返回值:若读取成功则返回实际读到的字节数,若已到文件结尾则返回0,若出错则返回-1。参数:1、filedes文件标识符;2、*原创 2013-11-01 23:21:07 · 7581 阅读 · 1 评论 -
3.11 pread函数-文件原子读
pread函数用于从打开文件的指定位置开始读取数据,函数原型如下:#include ssize_t pread(int filedes, void *buf, size_t nbytes, off_t offset);返回值:若读取成功则返回实际读到的字节数,若已到文件结尾则返回0,若出错则返回-1。参数:1、filedes文件标识符;2、*buf存放读出数据的缓原创 2013-11-01 22:18:03 · 7991 阅读 · 0 评论 -
3.7 read函数-文件数据读
read函数用于从打开的文件中读取数据,函数原型如下:#include ssize_t read(int filedes, void *buf, size_t nbyetes);返回值:如果读成功则返回实际读到的字节数,若已读到文件结尾则返回0,若出错则返回-1。参数:1、filedes 文件标识符,由调用open函数从内核获得。2、*buf 存放所读数据的缓冲区原创 2013-11-01 18:29:41 · 2643 阅读 · 0 评论 -
3.5 close函数-关闭文件
close函数用于关闭一个已经打开的文件。函数原型如下:#include int close(int filedes);返回值:若成功则返回0,出错则返回-1参数:filedes是文件标识符,是通过open函数获得的文件标识符。说明:当一个进程终止时,内核会自动关闭他所有打开的文件。所以close函数可以不用。不过最好在完成文件的操作后及时关闭文件,以释放文件,否原创 2013-11-01 13:58:02 · 6443 阅读 · 0 评论 -
sysconf函数
sysconf函数用于找到一个特定系统实际支持的限制值。函数原型如下:#include long sysconf(int name);name代表限制名常量,是一些整数,分别代表一个限制名,_SC_LOGIN_NAME_MAX其值是71,代表限制名LOGIN_NAME_MAX。sysconf(_SC_LOGIN_NAME_MAX)就是限制名LOGIN_NAME_MAX的实际限原创 2013-10-31 22:37:36 · 3152 阅读 · 0 评论 -
4.3 文件类型判断宏与文件类型常量
文件类型信息包含在stat结构的st_mode成员中,大多数系统都在文件中定义了对应的类型字和类型判断宏。一、判断文件类型方法有两种:(1)用文件类型判断宏:例如S_ISREG(buf.st_mode)(2)先用文件类型屏蔽字(S_IFMT)与buf.st_mode进行“与”运算,然后再与对应的类型字相比较。例如:(buf.st_mode & S_IFMT) == S_IFRE原创 2013-11-03 11:48:04 · 5141 阅读 · 0 评论 -
Glibc所实现的规范与功能宏对应表
Glibc 全部或者部分实现很多规范,要启用相关规范,就必须定义关对应的宏。定义对应的宏有两种方法:(1)在cc命令中指定,如:cc -D _POSIX_SOURCE file.c(2)将源程序的第一行设置为:#define _POSIX_SOURCE 1下面是Glibc所实现的规范与功能宏对应表Glibc所实现的规范与功能宏对应表规范对应宏原创 2013-11-03 08:54:37 · 939 阅读 · 0 评论 -
4.4 S_ISUID、S_ISGID位与文件访问权限检查
一、进程的文件访问权限。一个程序在其执行过程可能要访问其他文件,当其进程要访问相关文件,例如调用open、read、write等函数时,系统内核会检查用户对文件的访问权。每个进程都有一个进程属性数据结构记录着进程的相关信息。下表中的进程信息记录项是内核检查进程对文件访问权限的主要依据。进程信息信息意义实际用户ID标识是此用户在执行本进程原创 2013-11-03 19:41:42 · 7413 阅读 · 0 评论 -
4.7 access函数-文件权限测试
access函数用于按实际用户ID和实际组ID进行访问权限测试。函数原型如下:#include int access(const char *pathname, int mode);返回值:若测试成功则返回0,若出错则返回-1参数:pathname 文件路径mode 所要测试的权限,是一些预定义的常量mode值代表权限R_O原创 2013-11-04 19:32:38 · 705 阅读 · 0 评论 -
3.8 write函数-文件数据写
write函数用户向打开的文件写入数据。函数原型如下:#include ssize_t write(int filedes, const void *buf, size_t nbtyes);返回值:如果写成功则返回实际读到的字节数,若出错则返回-1。参数:1、filedes 文件标识符,由调用open函数从内核获得。2、*buf 存放所写入读数据的缓冲区地址。原创 2013-11-01 19:11:40 · 2908 阅读 · 0 评论 -
4.11 chown、fchown和lchown函数-文件用户与用户组
chown、fchown和lchown函数用于更改文件的用户ID(stat.st_uid)和组ID(stat.gid)。函数原型如下:#include int chown(const char *pathname, uid_t owner, gid_t group);int fchown(int filedes, uid_t owner, gid_t group);int lchow原创 2013-11-05 00:22:03 · 3498 阅读 · 0 评论 -
3.15 fcntl函数(3)-利用F_GETFL/SET_FL获取或者设置文件状态标志
fcntl函数可以改变已打开文件的性质。函数原型如下:#include int fcntl(int filedes, int cmd, ...);当第二个参数cmd=F_GETFL时,它的作用是取得文件描述符filedes的文件状态标志。当第二个参数cmd=F_SETFL时,它的作用是设置文件描述符filedes的文件状态标志,这时第三个参数为新的状态标志。返回值原创 2013-11-02 23:47:12 · 3018 阅读 · 0 评论 -
五大UNIX系统家族族谱
UNIX操作系统不是某个特定操作系统实现,而是在遵循UNIX相关标准下的一个操作系统大家族,主要代表有SVR4、FreeBSD、Linux、Macc OS X、Solaris五大UNIX操作系统族谱家族名称维护者主要版本说明SVRUSLSVR3.2、SVR4 BSDCSRG4.2BSD(1983)、4.原创 2013-11-01 01:08:24 · 2270 阅读 · 0 评论 -
4.12 st_size、st_blksize和st_blocks成员-文件尺寸
struct stat结构(参考《4.2 stat函数》)中的一些数据成员可以反应文件所占用的存储空间以及所在的文件系统参数。其中常用的有:st_blksize(文件的块大小)、st_blocks(文件包含的块数)和st_size(文件大小字节数)。所谓块大小就是文件系统在给文件分配空间时的最小单位。文件系统并不是以字节为单位给具体文件分配存储空间,都是以一个合适大小(例如512字节等)为单位原创 2013-11-05 00:59:25 · 9779 阅读 · 3 评论 -
4.5 st_mode成员-文件访问权限
一、stat.st_mode数据位分析stat.st_mode数据包含着文件很多属性,对st_mode的操作都是在位级进行,包括文件类型、S_ISGID位和S_ISUID位。下面是st_mode其中一些位的分布汇总表,是从GUN C库的头文件中对一些常量的定义做出来的分析和汇总。st_mode位分布表位文件属性相关常量(八进制)bit12-bit原创 2013-11-04 16:57:02 · 6111 阅读 · 1 评论 -
4.2 lstat函数-文件读写定位
lstat函数用于获取符号链接文件的属性信息(例如文件类型、访问权限和访问时间等)。函数原型如下:#include int lstat(const char *restrict pathname, struct stat *restrict buf);其中struct sata结构定义在文件中。返回值:成功返回0,出错返回-1。参数:1、pathname 文件路径2、原创 2013-11-03 01:50:08 · 819 阅读 · 0 评论 -
3.15 ioctl函数
不能用open、creat、read、write、pread、pwrite、lseek、close、dup、dup2、sysnc、fsync、fdatasync和fcntl这些通用函数进行的I/O操作,一般都要考虑用ioctl来操作。函数原型:#include #include #include int ioctl(int filedes, int request, ...);原创 2013-11-03 00:19:09 · 721 阅读 · 0 评论 -
3.14 fcntl函数(1)-利用参数F_DUPFD复制新文件描述符
fcntl函数可以改变已打开文件的性质。函数原型如下:#include int fcntl(int filedes, int cmd, ...);当第二个参数cmd=F_DUPFD时,它的作用是根据filedes复制一个新文件描述符。此时,fcntl相当于dup和dup2函数。第三个参数指出新复制的文件描述符是一个等于或大于该参数的可用文件描述符,且不能等于一个已有的文件原创 2013-11-02 17:42:06 · 4546 阅读 · 3 评论 -
三大UNIX标准化汇总
编写标准的、可移植的UNIX应用程序重点考虑的三个标准:ISO C、POSIX和SUS。三大UNIX规范汇总表规范缩写规范全称工作组规范演变规范主要内容ISO CISO/IEC 9899:1999WG14ANSI X3.159-1989 (简称C89)ISO/IEC 9899:1990 (简称C90)ISO/IEC 9原创 2013-11-01 00:49:03 · 1015 阅读 · 0 评论 -
3.13 sync函数-文件缓存与同步
fsync、fdatasync和sync函数用于让磁盘上实际文件系统与缓冲区高速缓存内容保持同步。函数原型如下:#include int fsync(int filedes);int fdatasync(int filedes);void sync(void);sync函数只是将所有修改过的块缓冲区压入输出队列,然后就返回,它并不等待实际写磁盘操作结束。fsync函数原创 2013-11-02 13:29:30 · 1325 阅读 · 0 评论 -
3.12 dup2函数-文件描述符复制
dup2函数用于复制一个现存的文件描述符,函数原型如下:#include int dup2(int filedes, int filedes2);返回值:若复制成功则返回新文件描述符,若出错则返回-1。参数:1、filedes现存的文件描述符。2、filedes2指定的要生成的新文件描述符。说明:1、若filedes2是一个已存在的文件描述符,filede原创 2013-11-02 10:21:43 · 848 阅读 · 0 评论 -
5.2 流与FILE对象
流的定义与FILE结构原创 2013-11-07 11:23:16 · 1234 阅读 · 0 评论 -
5.7 fgets/fputs和gets/puts-流的单行读写
fgets/fputs、gets/puts是两对用于流的单行读写函数。函数原型:#include char *fputs(char *restrict buf, int n, FILE *restrict fp);char *gets(char *buf);返回值:若成功则返回buf,若已到达文件结尾或者出错则返回NULL参数:buf 为存放取出字符的缓冲区地址原创 2013-11-06 23:55:49 · 1263 阅读 · 0 评论 -
4.23 st_dev和st_rdev成员-文件设备号
一、主、次设备号每个文件都有主次设备号,主设备号用来区分不同类型的设备,次设备号用来区分同一类型的不同设备。同一类型的设备具有相同的驱动程序,主设备号用来标识驱动程序。而次设备号用来标识具体指向哪个设备。对于普通文件来讲,其主设备号来标识实际存储设备的主设备号,而次设备号表示所在文件系统的所在分区(可以把同一存储设备的不同分区看成是不同的设备)。二、stat.st_dev和st_rde原创 2013-11-06 12:28:14 · 6053 阅读 · 0 评论 -
4.19 utime函数-文件时间修改
除了文件处理函数隐性地处理文件时间属性外,很多时候应用程序时间显式地处理时间属性,例如更改文件的时间属性,用文件的时间属性作为一个事务处理的依据,有时候还要将时间变成让人看懂的字符打印出来。(时间到了,睡觉去!)原创 2013-11-05 02:47:48 · 2549 阅读 · 0 评论 -
4.17 symlink和readlink函数-符号链接
一、symlink函数symlink函数用于创建一个符号链接文件。函数原型:#include int symlink(const char *actualpath, const char *sympath);返回值:如果创建成功则返回0,否则返回-1参数:actualpath 要指向的路径sympath 被创建的新目录项路径symlink的本质是相当于cr原创 2013-11-05 16:09:43 · 3622 阅读 · 0 评论 -
4.21 opendir、readdir和closedir函数-读目录
mkdir和rmdir分别用户创建目录文件和删除目录文件。自然还会有读目录文件的函数。opendir函数用于打开一个目录文件,获取一个目录描述符,相当于普通文件的open函数;closedir函数用于关闭一个已经打开的目录文件,相当与普通文件的close函数;readdir函数用于逐个读出目录表中的目录项(参考《4.20 mkdir和rmdir函数》),相当于普通文件的read函数。原创 2013-11-05 21:18:32 · 2130 阅读 · 0 评论 -
4.22 chdir、fchdir和getcwd函数-当前工作目录
虽然《Unix环境高级编程》一书把chdir和fchdir函数放到文件管理这部分来讲,但严格讲这两个函数不属于文件系统管理的函数,应该属于进程管理的函数。这两个函数用于改变进程的当前工作目录,而进程的当前工作目录是进程的属性,所以它们不属于文件系统管理函数,但它却涉及到文件管理(例如文件的相对路径问题)。所以放到这里来将也是有道理的。但getcwd函数不应该放到这节来讲,而是应当放到上一节《4.2原创 2013-11-05 22:21:58 · 2028 阅读 · 0 评论 -
4.20 mkdir和rmdir函数-目录的创建与删除
一、mkdir函数mkdir函数用于创建一个新目录,函数原型:#include int mkdir(const char *pathname, mode_t mode);返回值:若创建成功则返回0,若出错则返回-1参数:pathname 要创建的新目录的路径mode 文件创建模式字。(参考《4.5 文件访问权限》、《4.6 新文件和新目录的所有权》和《4.8原创 2013-11-05 19:59:19 · 4572 阅读 · 0 评论 -
4.18 st_atime、st_mtime和st_ctime成员-文件时间属性
文件属性包括数据属性和管理属性。所谓数据属性就是文件所记录的数据,是创建一个文件的真正目的。而管理属性则是出于管理目的而产生的信息,例如文件名、文件创建时间、文件修改时间、文件权限、文件用户ID和文件组ID,这些都是出自于管理目的而产生的,并随着管理的变动而变动。stat结构(参考《4.2 stat函数》)反映的信息全部为文件的管理属性。stat.st_atime(数据的最后访问时间)、sta原创 2013-11-05 02:08:14 · 30158 阅读 · 0 评论 -
4.15 link、unlink函数-创建和删除硬链接
link函数用于创建一个指向已存在文件的新目录项。函数原型如下:#include int link(const char *existingpath, const char *newpath);返回值:若成功则返回0,若失败则返回-1参数:existingpath 一个以存在文件的路径newpath 新目录项的路径一、目录项和硬链接可以这么理解,不管是fa原创 2013-11-05 14:46:14 · 3343 阅读 · 0 评论 -
5.6 getc/putc、fgetc/fputc和getchar/putchar-流的单字符读写
getc/putc、fgetc/fputc和getchar/putchar是三对用于一次一个字符的流读写函数。fgetc/fputc前面带f(function)表示在库的实现中一定要定义为函数。而getc/putc表示在库的实现中可以定义为宏,当然也可以定义为函数。getchar/putchar表示操作对象为标准输入(stdin)和标准输出(stdout)。函数原型:#includ原创 2013-11-06 22:42:36 · 1773 阅读 · 0 评论 -
5.5 fopen、freopen和fdopen函数-打开流
fopen、freopen和fdopen函数-打开流实例 x.5.5.1.c#include int main(void){ char pathname[] = "/tmp/myfile"; FILE *fp; if ((fp=fopen(pathname, "r")) == NULL) { printf("fopen原创 2013-11-07 12:16:45 · 3528 阅读 · 0 评论 -
3.6 lseek函数-文件读写定位
lseek函数用来设置当前文件偏移量(current file offset)。通俗说就是接下来对文件的读操作或者写操作,从什么位置开始。函数原型如下:#include off_t lseek (int filedes, off_t offset, int whence);返回值:若成功则返回新的文件偏移量,若出错则返回-1。参数:1、filedes是 文件标识符,通原创 2013-11-01 14:52:23 · 1960 阅读 · 0 评论 -
3.2 文件描述符
父母没啥文化,给孩子取名字是一个重大负担。我出生之前父母已经绞尽脑汁给前面四个孩子都取了名字,等到我出生时,父母把能用的汉字都用完了,于是我就没了名字。由于我排行老五,自小大家就叫周五,上学时老师也就简单地把我名字记为周伍,总算不太难看了。小学阶段我一直用这个土名,直到小学毕业我有了点文化之后才给自己取了个名字叫周XX。现在,不管是叫我周伍还是周XX我都知道是在叫我。父母虽说没给我取个好名字,但目原创 2013-11-01 11:23:30 · 1031 阅读 · 0 评论 -
4.9 chmod和fchmod函数-文件权限修改
chmod和fchmod函数用于保存stat.st_mode成员所代表的文件属性到磁盘。函数原型:#include int chmod(const char *pathname, mode_t mode);int fchmod(int filedes, mode_t mode);返回值:若成功则返回0,若出错则返回-1参数:pathname 文件路径filedes原创 2013-11-04 22:13:59 · 2374 阅读 · 0 评论