学科分类
目录
Linux编程

文件操作

除文件I/O操作外,Linux系统的内核中还封装了许多具有丰富功能的函数,在编程工作中比较常用的函数有:stat()函数、accsee()函数、chmod()函数、truncate()函数、link()函数,下面对这几个函数进行讲解。

1、 stat()函数

stat()函数用于获取文件的属性,该函数存在于函数库sys/stat.h中,其声明如下:

int stat(const char *path, struct stat *buf);

stat()函数中的参数path为文件路径,参数buf为传出参数,用户接受获取到的文件属性。文件的属性存储于inode中,因此stat()函数实际上是从inode结构体中获取的文件信息。stat()函数的返回值为整型,当调用成功时函数返回0,调用失败时返回-1,并设置errno。stat()函数的参数分别为文件名与inode结构体指针,当该函数调用结束后,程序可以通过读取参数buf,获取文件的属性信息。

案例3:使用stat()函数,并输出文件的大小。

 1    #include <stdio.h>
 2    #include <unistd.h>
 3    #include <stdlib.h>
 4    #include <sys/stat.h>
 5    
 6    int main()
 7    {
 8        struct stat sbuf;
 9        int ret=2;
 10        ret=stat("a.out",&sbuf);
 11        if(ret==-1){
 12            perror("stat error:");
 13            exit(1);
 14        }   
 15        printf("len=%ld\n",sbuf.st_size);
 16        return 0;
 17    }

编译案例代码,执行二进制文件,输出结果如下:

len=7401

系统调用中还有一个lstat()函数,该函数与stat()功能相近,都能获取文件属性,只是在面向符号链接时,stat()会穿透符号链接,获取被连接文件的属性,而lstat()不穿透符号链接,直接获取符号链接文件的属性。lstat()函数的声明如下:

int lstat(const char *path, struct stat *buf);

若函数调用成功则返回0,失败返回-1,并设置errno的值。

lstat()通常用于判断文件类型,文件类型存储于参数inode结构体的成员st_mode的高4位中,当使用lstat()函数获取文件inode中的st_mode后,可以使用判断文件类型的一组宏函数判断文件类型,该组宏函数有7个,分别如下:

(1) S_ISREG(m)。判断文件是否为普通文件;

(2) S_ISDIR(m)。判断文件是否为目录文件;

(3) S_ISCHR(m)。判断文件是否为字符设备文件;

(4) S_ISBLK(m)。判断文件是否为块设备文件;

(5) S_ISFIFO(m)。判断文件是否为套接字文件;

(6) S_ISLNK(m)。判断文件是否为管道文件;

(7) S_ISSOCK(m)。判断文件是否为socket文件。

判断结果若为真,则是某种文件,否则反之。

2、access()函数

access()函数用于测试文件是否拥有某种权限,该函数存在于库函数unistd.h中,其声明如下:

int access(const char *pathname, int mode);

access()函数中第一个参数为文件名,第二个参数取值有4个:R_OK、W_OK、X_OK及F_OK,前3个值分别测试文件是具备读、写、执行权限,最后一个值测试文件是否存在。若该函数的返回值为0,表示调用成功,且指定文件存在或具有某个权限;若返回-1,则表示函数调用失败,或文件不存在或不具备某种权限。

3、 chmod()函数

chmod()函数用于修改文件的访问权限,该函数存在于函数库sys/stat.h中,其函数声明如下:

int chmod(const char *path, mode_t mode);

chmod()函数的第一个参数path为路径名,第二个参数用于传递修改后的权限。该函数的返回值为正数,修改成功返回0;失败返回-1,并设置errno值。

4、 truncate()函数

truncate()函数用于修改文件大小,常用于扩展文件,其功能与lseek()类似,该函数存在于函数库sys/stat.h中,其函数声明如下:

int truncate(const char *path, off_t length);

truncate()函数中的参数path为路径名,参数length用于设置文件大小。该函数的返回值为正数,同样成功返回0,失败返回-1,并设置errno的值。

点击此处
隐藏目录