打开文件、新建文件和关闭文件操作

打开文件的一般形式是:
open(文件路径, 标志);
函数的返回值是文件描述符,如果打开文件成功返回一个正整数,否则返回–1。标志是用于指定打开文件操作模式的枚举常量,主标志见表

C/C++:文件、目录操作

主标志是互斥的,使用其中一种则不能再使用另外一种。除了主标志以外,还有副标志可与它们配合使用,副标志可同时使用多个,使用时在主标志和副标志之间加入按位与( |)运算符,见表

C/C++:文件、目录操作

创建新文件的同时可设置文件的权限,这时函数需要增加一组实际参数,形式为:
open(文件路径, 标志, 权限标志);

C/C++:文件、目录操作

文件权限标志也可以使用加权数字表示,这组数字被称为 umask 变量,它的类型是
mode_t,是一个无符号八进制数。 umask 变量的定义方法如表 所示。 umask 变量由 3
位数字组成,数字的每一位代表一类权限。用户所获得的权限是加权数值的总和。例如 764
表示所有者拥有读、写和执行权限,群组拥有读和写权限,其他用户拥有读权限。

C/C++:文件、目录操作

新建文件的另一个函数是 creat(),该函数的一般形式是:
creat(路径, umask);
当文件被成功创建函数的返回值为 0,否则为–1。当文件不需要使用了,则可以使用close()函数关闭文件。关闭文件的一般形式为 close(文件描述符),如果关闭文件成功, close()函数返回 0,否则返回–1。


文件状态和属性操作:

获取文件状态和属性操作可使用 fstat()、 lstat()和 stat()这 3 个函数来操作。 fstat()函数
用来返回一个已打开文件的状态和属性信息, lstat()和 stat()函数可对未打开文件进行操作。
lstat()和 stat()函数的区别是当文件是一个符号链接时, lstat 返回的是该符号链接本身的信
息;而 stat 返回的是该链接指向的文件的信息。它们的一般形式为:
fstat(文件标识符, struct stat *buf);
lstat(路径, struct stat *buf);
stat(路径, struct stat *buf);

其中结构体 struct stat 类型是 stat.h 函数库提供的一种用于保存文件类型的结构体。该
结构体成员的意义见表

C/C++:文件、目录操作

其中, st_mode 与其他成员相比要复杂许多,必须使用标志与之进行按位与运算才能
获得相应信息。与前面按位或运算比较可得知,按位与运算其实只是按位或运算的逆操作。
st_mode 的标志见表

C/C++:文件、目录操作

修改文件权限的系统调用函数是 chmod(),它与 shell 中的命令 chmod 作用相似。chmod
的一般形式是: chmod(路径, umask)。如果修改成功返回值为 0,否则返回–1。


#include <fcntl.h> //提供 open()函数

#include <sys/types.h> //提供 mode_t 类型

#include <sys/stat.h> //提供 open()函数的符号

#include <unistd.h> //提供 close()函数

#include <iostream>

#include <cstdio>

using namespace std;

int main(){

int f;

const char *f_path="fileop/1.txt";

mode_t f_attrib=S_IRGRP|S_IRUSR|S_IWUSR;

f=open(f_path,O_RDONLY);

if (f==-1){

f=creat(f_path,f_attrib);

if (f==-1){

puts("创建失败!");

}

}

struct stat *buf ;
buf= (struct stat *)malloc(sizeof(struct stat));

//int *p;

//p=(int *)malloc(sizeof(int));

fstat(f,buf);

if (buf->st_mode & S_IRUSR){

puts("文件主可读\n");

}

 

if (buf->st_mode & S_IRGRP){

puts("同组人可读\n");

}

 

close(f);

chmod(f_path,0771);

 

return 0;

}


常用目录操作是扫描子目录,与此相关的函数被封装在头文件 dirent.h

使用一个名为 DIR 的结构作为子目录处理的基础,这个结构的指针所指向的内存空间被
称之为子目录流。

C/C++:文件、目录操作

遍历目录中所有文件的函数:

C/C++:文件、目录操作

 

 

 

 

 

 

 

 

 

相关文章: