相关文章推荐
冷冷的茄子  ·  关于《杭向未来·大学生创业创新三年行动计划实 ...·  4 月前    · 
细心的茶叶  ·  2022年贵州理工学院与英国贝德福特大学合作 ...·  6 月前    · 
挂过科的烤面包  ·  桌面软件开发框架大赏 - Lzhdim's ...·  1 年前    · 
慷慨的柿子  ·  李强在第十五届夏季达沃斯论坛开幕式上的致辞(全文)·  1 年前    · 
不羁的鸵鸟  ·  港区/美区 Apple Musica. ...·  1 年前    · 
Code  ›  C语言文件读取那些事(open,fopen等函数深层理解)开发者社区
open函数 c语言 fopen c语言fopen函数
https://cloud.tencent.com/developer/article/2298864
力能扛鼎的作业本
1 年前
用户8282247

C语言文件读取那些事(open,fopen等函数深层理解)

原创
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
用户8282247
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > C语言文件读取那些事(open,fopen等函数深层理解)

C语言文件读取那些事(open,fopen等函数深层理解)

原创
作者头像
用户8282247
修改 于 2023-06-29 17:28:26
437 0
修改 于 2023-06-29 17:28:26
举报
文章被收录于专栏: 用户8282247的专栏 用户8282247的专栏

C语言文件读取操作特别是在linux内核,嵌入式开发中使用的较为频繁。

文件读取示例

	文件读取操作
	char buf[100] = {0};
	fd = open("xxx.c");
	// fd接受返回值,-1为错误
	char writebuf[20] = "I love";
	// 读取文件到buf数组中,长度为10个
	ret = read(fd, buf, 10);
	// 写入数据
	ret = write(fd, writebuf, strlen(writebuf));
	close(fd);  

C语言中,文件操作为:打开(open),操作(write),关闭(close)

区别于python等语言,缺少关闭操作,但同时有保存操作。

为什么需要关闭函数

文件操作是在电脑内存中进行(区别于外存--硬盘),文件在内存中操作后还需要保存在外存上。所以每次写文档时需要注意:要时刻保存文档(Ctrl+s),因为文件内容当前在内存中,没有外存在外存中。(为什么电脑不能写一个数据就自动保存呢?主要原因还是频繁的写入数据到外存中将加快硬盘的损坏。)

关闭函数其实就是告诉电脑,在内存中的内容已经写好,需要保存到硬盘上了。

打开函数

	open("xxx",O_TRUNC)		//文件中原有内容清空
	open("xxx",O_APPEND)	//写到内容的后面
	open("xxx",O_CREAT)	//创建一个不存在的文件并打开(如果以前存在,则会删除老文件在创建同名文件)
	open("xxx",O_CREAT | O_EXCL, 0666)	//不存在文件进行创建,存在文件时进行报错(0666目的是使文件可读可写)
	O_NONBLOCK	//非阻塞模式,打开文件如果不能立马执行,则立刻退回(默认是阻塞模式,文件一定被打开但时间没保证)
					// 应用于硬件打开(设备文件),不用于普通文件
	O_SYNC		//没有O_SYNC时,write写入的内容只是在底层的缓冲区(之后一起存放在硬件中),有些时候文件非常重要需要直接写入硬件中

lseek函数,确定当前所属文件位置

	#include <stdio.h>
	#include <sys/types.h>
	#include <sys/stat.h>
	#include <fcntl.h>
	#include <unistd.h>
	#include <string.h>
	int cal_len(const char *pathname)
	int fd = -1;		// fd 就是file descriptor,文件描述符
	int ret = -1;
	// 第一步:打开文件
	#if 1
	fd = open(pathname, O_RDONLY);
	if (-1 == fd)		// 有时候也写成: (fd < 0)
		//printf("\n");
		perror("文件打开错误");
		// return -1;
		return -1;
	#endif
	// 此时文件指针指向文件开头
	// 我们用lseek将文件指针移动到末尾,然后返回值就是文件指针距离文件开头的偏移量,也就是文件的长度了
	ret = lseek(fd, 0, SEEK_END);
	return ret;
	int main(int argc, char *argv[])
	int fd = -1;		// fd 就是file descriptor,文件描述符
	int ret = -1;
	if (argc != 2)
		printf("usage: %s filename\n", argv[0]);
		_exit(-1);
 
推荐文章
冷冷的茄子  ·  关于《杭向未来·大学生创业创新三年行动计划实施细则》的通知 - 就业频道投稿 - 中国大学生在线
4 月前
细心的茶叶  ·  2022年贵州理工学院与英国贝德福特大学合作举办 电气工程及其自动化专业(中外合作办学)招生简章-贵州理工学院
6 月前
挂过科的烤面包  ·  桌面软件开发框架大赏 - Lzhdim's Fashion - 博客园
1 年前
慷慨的柿子  ·  李强在第十五届夏季达沃斯论坛开幕式上的致辞(全文)
1 年前
不羁的鸵鸟  ·  港区/美区 Apple Musica. 曲库贼大,上亿首歌曲 (相比国区只有数千 - 42 号车库
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号