网站首页
手机版

Linux文件系统操作中关键函数详解

更新时间:2026 02 18 05:25:54作者:佚名

Linux文件系统操作中关键函数详解

各位老铁们好,相信很多人对Linux文件系统操作中关键函数详解都不是特别的了解,因此呢,今天就来为大家分享下关于Linux文件系统操作中关键函数详解以及的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

int open(const char *pathname, int flags);//pathname 文件名(path);标志打开模式,包括O_RDONLY、O_WRONLY、O_RDWR

int open(const char *pathname, int flags, mode_t mode);//该函数一般用于创建新文件,flags加O_CREAT,如:O_RDWR|O_CREAT

int creat(const char *pathname, mode_t mode);//创建一个新文件,mode权限描述,如0644(八进制,取反并与umask进行AND运算,得到真实结果)

返回值:成功则返回文件描述符fd,失败则返回-1。

例子:

int fd=open('test.txt', O_WRONLY);//以只写模式打开test.txt并返回文件描述符

附:文件描述符说明(32位机器上文件描述符范围为0到1023):0代表标准输入,1代表输出,2代表错误;我们的程序从3开始,并且每次总是使用最小的一个。

2.read文件读取(man 2 write视图)

ssize_t read(int fd, void *buf, size_t count);//ssize_t 有符号整数; fd 文件描述符; buf传出参数,读取的内容在buf中; count代表buf的长度

返回值:大于0表示读取的字节数,等于0表示读取完成,-1表示读取失败

3.write文件写入(man 2 write视图)

ssize_t write(int fd, const void *buf, size_t count);//buf中需要写入的内容,count中需要写入的内容的长度; ssize_t 有符号整数; size_t 无符号整数

返回值:大于写入的字节数,0表示没有写入数据,-1表示写入失败

4、lseek移动文件指针(man 2 lseek查看)

off_t lseek(int fd, off_t offset, int wherece); //fd文件描述符,offset移动偏移量,从哪里移动参考点

whence有三个值:SEEK_SET文件起始位置、SEEK_CUR表示指针当前位置、SEEK_END文件结束位置。

返回值:大于等于0表示距文件开头的偏移量,-1表示失败

附:该函数可用于扩展,如lseek(fd,100,SEEK_END);表示扩容100字节,但扩容需要写操作才能生效。

5. stat 获取文件信息(man 2 stat 查看)

int stat(const char *path, struct stat *buf);//path 文件路径; buf传出参数,获取到的文件信息在buf中

int fstat(int fd, struct stat *buf);//fd文件描述符

int lstat(const char *path, struct stat *buf);//lstat和stat的区别仅在于符号链接文件。 lstat读取符号链接文件,stat读取符号链接对应的源文件。

返回值:成功返回0;失败时返回-1。

附:下面解释struct stat结构体的组成

dev_t st_dev; /* 包含文件设备ID的设备ID*/

ino_t st_ino; /* inode编号inode节点*/

mode_t st_mode; /* 保护文件类型和访问权限等(该字段非常重要,该字段的详细说明请参见man文档)*/

nlink_t st_nlink; /* 硬链接数量硬链接数量*/

uid_t st_uid; /* 所有者用户ID的用户ID*/

gid_t st_gid; /* 所有者组ID的组ID*/

dev_t st_rdev; /* 设备ID(如果是特殊文件) 如果该文件是设备文件,则其设备号*/

off_t st_size; /* Total Size, in bytes 文件的字节数,即文件大小*/

blksize_t st_blksize; /* blocksize为文件系统I/O块大小,即文件系统的I/O缓冲区大小*/

blkcnt_t st_blocks; /* 分配块的512B块数*/

time_t st_atime; /* 最后访问时间最后访问时间*/

time_t st_mtime; /* 最后修改时间最后修改时间*/

time_t st_ctime; /* 最后状态改变时间最后改变时间*/

结构体struct stat的st_mode说明:

.check the file type using the st_mode field://使用st_mode检查文件类型的宏定义如下

S_ISREG//普通文件(m)是普通文件吗?

S_ISDIR//Directory(m)目录?

S_ISCHR//字符设备(m)字符设备?

S_ISBLK//块设备(m)块设备?

S_ISFIFO//Pipe(m) FIFO(命名管道)?

S_ISLNK//符号链接(m)符号链接? (不在POSIX.1-1996 中。)

S_ISSOCK//Socket(m)套接字? (不在POSIX.1-1996 中。)

例子:

switch (sb.st_mode S_IFMT){ //S_IFMT是文件类型掩码,其值为八进制170000

附:S_IRWXU 文件所有者权限掩码,其值为00700; S_IRWXG 组权限掩码,其值为00070; S_IRWXO 他人的权限掩码,其值为00007;详细信息请参阅man 手册。用法是一样的,以S_IRWXU为例,如下:

6.access检查文件权限(man 2 access查看)

int access(const char *pathname, int mode);//pathname 文件名,mode 权限

返回值:所有权限都允许则返回0;只要有一个权限不允许就返回-1,出错也返回-1;

模式值说明:

如果不是F_OK:表示文件是否存在

如果不是R_OK | W_OK |

7. chmod 更改文件权限

int chmod(const char *path, mode_t mode);//path 文件路径; mode_t 整数,模式权限,必须是八进制数,或者使用预定义的宏,具体参见man手册

int fchmod(int fd, mode_t mode);//fd文件描述符

返回值:成功返回0;失败时返回-1。

8. chown更改文件所有者(一般需要root权限才能操作成功)

int chown(const char *path, uid_t Owner, gid_t group);//穿透符号链接;文件路径

int fchown(int fd, uid_t Owner, gid_t group);//直接文件操作; fd 文件描述符

int lchown(const char *path, uid_t Owner, gid_t group);//不穿透符号链接;文件路径

返回值:成功返回0;失败时返回-1。

9. truncate 将文件更改为指定长度

int truncate(const char *path, off_t length);//path文件路径,必须有写权限; length 文件长度,单位字节数

int ftruncate(int fd, off_t length);//fd文件描述符,该文件必须打开

返回值:成功返回0;失败时返回-1。

附:该函数可用于文件扩展,不需要一次写入即可生效; lseek函数扩展需要编写一次才能生效。

10. link创建硬链接

int link(const char *oldpath, const char *newpath);//oldpath源文件,newpath为要创建的硬链接的路径

返回值:成功返回0;失败时返回-1。

11. symlink 创建软链接

int symlink(const char *oldpath, const char *newpath);//oldpath源文件路径,newpath软链接路径

返回值:成功返回0;失败时返回-1。

12.readlink读取软链接对应的文件名(不是源文件的内容)

ssize_t readlink(const char *path, char *buf, size_t buf-siz);//path 软链接路径; buf传出参数,buf-siz为buf的长度;读取的内容在buf中

返回值:成功返回读取内容的长度,失败返回-1。

13. unlink 删除链接

如果是符号链接,则删除该符号链接;

如果是硬链接,则硬链接数量减1;当减为0时,释放数据块和Inode;

附:如果硬链接数为0,但有进程占用该文件,则必须等待该进程关闭该文件后,才能真正删除该文件。您可以使用此功能来创建临时文件。

首先打开或创建文件,然后取消链接。这样,当进程关闭文件或者进程退出时,文件就会被自动删除。

int unlink(const char *pathname);//pathname 文件路径

返回值:成功返回0;失败时返回-1。

14. 重命名文件重命名

int rename(const char *oldpath, const char *newpath);//oldpath原文件,newpath新文件

返回值:成功返回0;失败时返回-1。

15、fcntl操作文件描述符(内存:文件控制)

int fcntl(int fd, int cmd, /* arg */);//fd 文件描述符; cmd命令;第三个是可变参数,可选

返回值:成功返回大于等于0,根据cmd的值返回不同含义;失败返回-1。

例子:

根据功能分类确定cmd的值:

2.获取或设置文件描述符标记,cmd为F_GETFD、F_SETFD

3.获取或设置文件状态标志,cmd为F_GETFL、F_SETFL

4.获取或设置锁,cmd为F_SETLK、F_SETLKW、F_GETLK

5.获取或设置异步IO所有权,cmd为F_GETOWN、F_SETOWN、F_GETSIG、F_SETSIG

6.lease、文件和目录变更通知等,详细请查看man手册。

int dup(int oldfd);//旧文件描述符

int dup2(int oldfd, int newfd);//oldfd旧文件描述符,newfd新文件描述符

返回值:成功则返回新的文件描述符,失败则返回-1。

相关问答

问:Linux 文件操作的常见函数有哪些?
2个回答
风中摇曳着长发

答: 在 Linux 系统中,有很多常用函数可以帮助我们进行文件操作。比如,想要创建新的文件可以使用 "open()" 函数,想要读取文件的内容则可以用 "read()" 函数,而想要改写文件内容可用 "write()" 函数。如果想删除一个文件,可以使用 "close()" 函数来释放文件资源,以及 "unlink()" 函数来真正删除文件。此外,还有许多其他函数可以用来检查文件属性、改变文件权限等等。

221 人赞同了该回答

生命一旅程

答: 实际上,Linux 文件操作主要分为创建、读取、修改和删除四个方面。每个方面都有相应的系统函数支持。比如,如果想查看文件是否存在,可以使用 "access()" 函数来判断;如果想获取文件的尺寸大小,可以使用 "stat()" 函数;想要将文件移动到其他目录,可以使用 "rename()" 函数等等。

65 人赞同了该回答

问:如何用代码创建一个新的文本文件?
2个回答
何必锁我心

答: 要创建新的文本文件,你需要使用 "open()" 函数。首先,需要指定文件路径和操作模式,比如“w”表示写模式,用于新建文件或覆盖已有文件内容。然后,"open()" 函数会返回一个文件描述符,你可以使用这个描述符来操作该文件。记得在完成操作后,用 "close()" 函数关闭文件描述符释放资源。

117 人赞同了该回答

虚伪了的真心

答: 除此之外,也可以使用高层接口函数,比如 C++ 的“ofstream”对象来创建文本文件。这种方法更加简便易懂,并且能够处理一些更复杂的文本格式操作,例如文件编码、缓冲区管理等。

277 人赞同了该回答

为您推荐

欧洲杯焦点战:克罗地亚两球击败苏格兰,小组排名第二

【游戏进度】比赛第17分钟,弗拉西奇为克罗地亚首开纪录,改变了比分。第26分钟,克罗地亚球员洛夫伦被主裁判出示黄牌。比赛第33分钟,苏格兰用替补麦肯纳换下汉利,

2026-01-29 08:17

探索布鲁斯·威利斯18部高分佳作:经典虎胆龙威系列领衔

2:罪恶之城豆瓣评分8.4《罪恶之城》是改编自弗兰克米勒的同名漫画,由罗伯特·罗德里格兹、弗兰克·米勒和昆汀·塔伦蒂诺执导的动作电影。影片讲述三个故事:SinC

2026-01-09 14:17

高中生赴日本留学必备条件与显著优势解析

高中日本留学申请条件: 1.正规院校1年以上日语学习证明; 2.年龄要15周岁以上,小于18周岁,一般的话是14周岁以上,20周岁以下都可以的; 3.

2024-12-01 09:58

澳洲签证全面解析:485、189、190、489及887签证详细解读

那么485,189,190,489和887签证到底是什么呢?然后有哪些要求呢?485临时居住签证485签证是临时的居住签证,有效期一般为1.5年(Graduat

2024-11-28 18:07

在日本,需要看N2或N1证书吗?

答案是:不是真的!那么在日本打工有哪些方式呢?1.研修生一般初中及以上学历即可。至于日语,大部分公司都不需要。如果日语能力高的话,即使不懂日语也能找到培训工作。

2024-11-26 13:16

韩国留学签证办理攻略:解析常见签证被拒原因及应对策略

一、签证办理被拒原因1.经济能力不足一般来说,签证官更关注学生家庭的固定收入和未来收入潜力是否有足够的关系。如果父母的年收入与提供的押金之间的关系不相符,签证官

2024-11-24 08:25