C语言文件读取操作特别是在linux内核嵌入式开发中使用的较为频繁。文件读取示例代码语言javascriptAI代码解释文件读取操作 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等语言缺少关闭操作但同时有保存操作。为什么需要关闭函数文件操作是在电脑内存中进行区别于外存--硬盘文件在内存中操作后还需要保存在外存上。所以每次写文档时需要注意要时刻保存文档Ctrls因为文件内容当前在内存中没有外存在外存中。为什么电脑不能写一个数据就自动保存呢主要原因还是频繁的写入数据到外存中将加快硬盘的损坏。关闭函数其实就是告诉电脑在内存中的内容已经写好需要保存到硬盘上了。打开函数代码语言javascriptAI代码解释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函数确定当前所属文件位置代码语言javascriptAI代码解释#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); } printf(文件长度是%d字节\n, cal_len(argv[1])); return 0; }其中#if 1 ...... #endif代表运行....中的内容数字改为0时表示不运行多进程打开文件open函数其实是有返回值的返回值一般为0,12,3...。其中0,12被系统默认使用分别应用于标准输入输出错误---当程序报错时就是在标准输出中返回内容代码语言javascriptAI代码解释fd open(xxx); //fd就是open函数的返回值一般从3开始当多个open函数打开同一个文档时不同open对应一个返回值---虽然打开的是同一个文档。