Linux_1_文件—文件和目录操作
来源:互联网 发布:手机淘宝降价提醒 编辑:程序博客网 时间:2024/05/23 12:03
* 库函数和系统调用的区别在于系统调用能够让你直接访问Linux内核提供的服务,比如前面学到的read、write函数就是基于系统调用的函数。* 系统调用函数存在与内核空间,库函数都是用户模式,所以系统调用不当可能会破坏系统,但库函数调用风险就要小很多。* 库函数堆I/O操作进行缓冲,减少了系统调用开销,同时可移植行也更好。* 打开和关闭文件FILE *p fopen(const char *path,const char *mode);int fclose(FILE *stream);* fopen以mode模式打开名为path的文件* fopen返回一个文件指针* 出现错误,fopen返回NULL,并把errno设置为恰当值。* 参数 mode 指向一个字符串,以下列序列之一开始 (序列之后可以有附加的字符): r 打开文本文件,用于读。流被定位于文件的开始。 r+ 打开文本文件,用于读写。流被定位于文件的开始。 w 将文件长度截断为零,或者创建文本文件,用于写。流被定位于文件的开始。 w+ 打开文件,用于读写。如果文件不存在就创建它,否则将截断它。流被定位于文件的开始。 a 打开文件,用于追加 (在文件尾写)。如果文件不存在就创建它。流被定位于文件的末尾。 a+ 打开文件,用于追加(在文件尾写)。如果文件不存在就创建它。读文件的初始位置是文件的开始,但是输出总是被追加到文件的末尾。* 如果把Linux中二进制文件转到Windows上需要更改参数,在后面加一个b
“rb”
打开一个用于读取的二进制文件
“wb”
创建一个用于写入的二进制文件
“ab”
附加到一个二进制文件
“rb+”
打开一个用于读/写的二进制文件
“wb+”
创建一个用于读/写的二进制文件
“ab+”
打开一个用于读/写的二进制文件
* 读写文件size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);size_t fwrite(void *ptr,size_t size,size_t nmemb,FILE *stream);* 参数pty指向缓冲区保存或读取的数据* 参数size控制记录大小,每次读取数据的大小* 参数nmemb为记录数* 函数返回读取或回写的记录数,1/0* fread函数分析
FILE *p=fopen("a.txt","r+");if(p==NULL){ printf("error is %s",strerror(errno));}else{printf("SUCCESS\n");char buf[100];memset(buf,0,sizeof(buf));size_t rc=fread(buf,sizeof(buf),1,p);//1是记录数,可以是2、3、4、5... //可以这样理解,我每次读取一条记录,这条记录的大小是sizeof(buf)while(1){ size_t tmp=fread(buf,1,10,p);//第二个参数表示每次读取记录的大小,读一个字节 //第三个参数表示每次读取多少记录行,读10个记录行 //返回的是每次读取的记录行,到文件最后没有把10行记录行读满,则返回所读的记录行 rc+=tmp;if(tmp== 0) break;}fclose(p);}
二进制读取文件
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>struct person{ int id; char name[20]; int age; int sex; char tel[20];};int Write(void){ char path[20] = "1.txt"; FILE *p = fopen(path, "w");//在windows下读取二进制文件,则文件读写方式符为wb\rb if (p == NULL) { printf("error is %s", strerror(errno)); } else { printf("SUCCESS\n"); struct person MEN[20]; memset(&MEN, 0, sizeof(MEN)); MEN[0].age = 22; strcpy(MEN[0].name, "苍老师"); MEN[0].age = 19; MEN[0].sex = 0; strcpy(MEN[0].tel, "100"); MEN[1].age = 19; strcpy(MEN[1].name, "饭岛爱"); MEN[1].age = 19; MEN[1].sex = 0; strcpy(MEN[1].tel, "101"); fwrite(&MEN, sizeof(struct person), 2, p); fclose(p); } return 0;}int Read(void){ char path[20] = "1.txt"; FILE *p = fopen(path, "r"); if (p == NULL) { printf("error is %s\n", strerror(errno)); } else { printf("Read Success\n"); struct person man; while (1) { size_t a = fread(&man, sizeof(struct person), 1, p); if (a == 0) break; printf("名字:%s\n年龄:%d\n电话:%s\n", man.name, man.age,man.tel); } fclose(p); } return 0;}int main(void){ Read(); return 0;}
阅读全文
0 0
- Linux_1_文件—文件和目录操作
- Linux_1_文件——文件描述符
- 文件和目录操作
- 文件和目录操作
- 文件和目录操作
- 操作文件和目录
- 文件和目录操作
- 文件和目录操作
- 文件和目录操作
- 操作文件和目录
- 文件和目录操作函数
- 文件和目录的操作
- python 文件和目录操作
- perl文件和目录操作
- perl文件和目录操作
- linux文件和目录操作
- linux-文件和目录操作
- linux文件和目录操作
- Shader学习(裁剪面)
- Binary Search:230. Kth Smallest Element in a BST
- HDU 1423 求求求求求求最长上升公共子序列
- 策略模式
- 一道简单的编程题
- Linux_1_文件—文件和目录操作
- ReactNative 样式布局小结
- Unsupervised Learning of Stereo Matching
- kafka背景及架构介绍
- Javascript prototype详解(二)
- Android中给ImageView添加background和src的区别
- 如何使用Markdown编辑器写博客
- Javascript prototype详解(三)
- Android移动开发-Android设备利用光线传感器监测光照强度的实现