Linux文件操作总结

本文详述了Linux系统中的文件操作,包括Unix、Linux系统调用如open、write等与标准C库函数如fopen、fwrite的区别。讨论了文件权限设置,并通过实例演示了Linux open函数及标准C库fopen函数的具体实现,涵盖文件的打开、创建、读写及关闭。同时,提到了文件操作的应用场景,如配置文件的管理。
摘要由CSDN通过智能技术生成

简述

本文结构:简述文件函数、Linux常用函数、标准C库常用函数、文件操作的应用场景、文件权限问题、Linux文件函数具体实现、标准C库的文件函数具体实现、简单实现对配置文件的增删改查小应用、内容小结

内核对文件的操作原理、管理机制是非常复杂繁多的,涉及到内核的访问机制。

Unix、Linux系统调用的常用文件函数有:open、write、lseek、access、read、close等
标准C库常用的函数有:fopen、fwrite、fseek、fread、fclose、fputc、feof、fgetc、fflush等

二者区别主要体现在:
1.适用范围、移植性、返回值
open、write、lseek、read、close等一般这些没有f开头的函数只能在Unix、Linux系统上用,移植性有限,open函数返回的是一个文件描述符。

而fopen、fwrite、fseek、fread、fclose、fputc、feof、fgetc等一般有f开头的函数不仅适用于Unix、Linux系统还适用Windows、ios或者其它操作系统,简而言之就是适用范围广,具有良好的移植性,fopen返回的是一个指向文件结构的指针。

移植性:代码在不同环境是否仍然适用

2.文件IO层次、缓冲区
open离内核近,低级IO,运行在内核态,无缓冲,读写文件操作时每次都要进行用户态与内核态切换,效率低
fopen离内核远,高级IO,运行在用户态,有缓冲,读写文件时减少用户态与内核态的切换,效率高,关于缓冲,随机访问则相反

总地来说:不同场景需要用到不同函数,配合使用。

Unix、Linux常用函数原型

函数一般在man手册第二页查

man 2 open
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags);//创建并打开文件
int open(const char *pathname, int flags, mode_t mode);//创建并打开文件
int creat(const char *pathname, mode_t mode);//open函数包含creat的功能,比较少用
#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);//将内容写进文件
ssize_t read(int fd, void *buf, size_t count);//读文件内容
int close(int fd);//关闭文件

简述标准C库常用函数原型

函数用man手册直接查

man fopen
#include <stdio.h>

FILE *fopen(const char *path, const char *mode);//创建并打开文件
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);//读
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);//写
int fclose(int fd);//关闭文件

对文件的操作有哪些应用场景呢?

关于Linux对文件的操作应用场景,例如:打印发票、账单、记录游戏的进度、配置游戏参数等,这些都需要操作系统自动帮我们操作,打开文件、然后增删改查、然后关闭文件。我们只需要运行这个可执行文件,就可以自动化地实现某些功能。

那怎么实现这些功能呢?这就需要C语言基础知识,特别是对字符串操作的函数,例如计算字符串长度strlen、字符串初始化memset、输入字符串gets、输出字符串puts、比较字符串strcmp、字符串大小写转换strupr和strlwr、复制字符串strcpy、memcpy、strncpy、拼接字符串strcat、分割字符串strtok、查询字符串strchr和strstr等,具体他们的原型是什么,可以用man手册直接查。

关于文件权限

创建并且打开文件时,怎么给它权限呢?
第一种:用man手册里的宏,man 2 open翻一翻,会有具体介绍
第二种:用数字形式,计算权限是用八进制计算的,简单地介绍第二种吧
在这里插入图片描述
从图中可以看到第一个 - 符号后包含 - 共有9个字符,连续三个是分别对应一组用户权限
看绿色的gcc生成的a.out可执行文件
第一个 - 符号(0)是指普通文件,同时也是8进制的表示方式
第一组rwx是该用户拥有者的权限,可读可写可执行
第二组r-x是文件拥有者所在组的其它成员的权限,可读可执行
第三组r-x是其它用户组的成员的权限,可读可执行

例如:如果仅限于自己使用,把权限设置成可读可写

-rwx------
0 110 000 000	// - 用0表示
0  6   0   0	//对应八进制数

Linux open函数具体实现

第一步—打开文件

用两个参数的open函数不能创建文件,只能打开

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

//1、int open(const char *pathname, int flags);
//2、int open(const char *pathname, int flags, mode_t mode);

int main()
{
   
        int fd;//定义一个int型的变量来储存open返回的文件描述符

        fd = open("./demo1.c",O_RDWR);//用了两个参数的open,第一个参数./意思是当前路径下打开demo1.c文件,第二个参数是可读read可写write
        if(fd == -1)
        {
   
                perror("open");//perror函数作用:在终端显示关于打开文件错误信息
                exit(-1);//如果打开文件失败一般就退出进程,需要头文件#include <stdlib.h>
        }
        printf(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值