https://www.cnblogs.com/zhanghongfeng/p/7726199.html

https://www.cnblogs.com/xudong-bupt/p/3478297.html

https://zhidao.baidu.com/question/196852872.html

第一种方法 open

O_RDONLY: 以只读方式打开文件

O_WRONLY:以只写的方式打开文件

O_RDWR:以读写的方式打开文件

O_CREAT:若打开的文件不存在,则创建该文件

O_EXCL:如果打开文件是设置了O_CREAT,但是该文件存在,则导致调用失败

O_TRUNC:如果以只写或只读方式打开一个已存在的文件,将该文件截至0

O_APPEND:追加的方式打开文件

O_NONBLOCK:用于非堵塞接口i/o

O_NODELAY

O_SYNC:当数据被写入外存或者其他设备后,操作才返回。

int writeFile(const unsigned char *write_buff, uint write_bytes,
char *path) {
int d;
if ((d = open(path, O_RDWR | O_APPEND |O_CREAT)) == -) {
perror("open file failed\n");
return -;
}
if (write(d, write_buff, write_bytes) == -) {
perror("write data fail\n");
close(d);
return -;
}
close(d);
sync();
return ;
int readFile(unsigned char* read_buff, uint &read_bytes, char *path) {
int fd;
if ((fd = open(path, O_RDONLY)) == -) {
perror("open file failed\n");
return ;
}
read_bytes = read(fd, read_buff, );
close(fd);
return read_bytes;

第二种方法 fopen

"r ":只读方式打开一个文本文件 "rb ": 只读方式打开一个二进制文件 
"w ":只写方式打开一个文本文件 "wb ": 只写方式打开一个二进制文件
"a ":追加方式打开一个文本文件 "ab ": 追加方式打开一个二进制文件
"r+ ":可读可写方式打开一个文本文件 "rb+ ": 可读可写方式打开一个二进制文件
"w+ ":可读可写方式创建一个文本文件 "wb+ ": 可读可写方式生成一个二进制文件
"a+ ":可读可写追加方式打开一个文本文件 "ab+ ": 可读可写方式追加一个二进制文件
返回值: 文件指针,如返回为NULL,表示打开失败

注意

  (1)写操作fwrite()后必须关闭流fclose()。

  (2)不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。

int writeFile(const unsigned char *write_buff, uint write_bytes,
char *path) {
FILE *file;
if ((file = fopen(path, "aw+")) == NULL) {
perror("fopen() error.Open file failed\n");
return -;
}
int res = fwrite(write_buff, sizeof(unsigned char), write_bytes, file);
fflush(file);
fclose(file);
return res;
}
int readFile(unsigned char* read_buff, uint &read_bytes, char *path) {
FILE* file;
if ((file = fopen(path, "r")) == NULL) {
perror("fopen() error.Open file failed\n");
return -;
}
read_bytes=fread(read_buff,sizeof(unsigned char),MAX_BUFF,file);
fclose(file);
return read_bytes;
}

要点:追加方式写文件,fwrite四个参数的意义,fflush

以及遇到的问题O_APPEND到底有没有作用

应该是一直有效的,以前好像是和O_TRUNC连用了的原因。

以及O_CREAT出现的问题 open with O_CREAT in second argument needs 3 arguments

现在不知道为什么不能重现这个问题了。

write注意点

如果文件原来有“你好”二字,以非追加写入“你”,文件依然是你好,所以有些情况要注意使用O_TRUNC。

C实现读写文件的更多相关文章

  1. Hyper-V无法文件拖拽解决方案~~~这次用一个取巧的方法架设一个FTP来访问某个磁盘,并方便的读写文件

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...

  2. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  3. Python读写文件

    Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('t ...

  4. php中并发读写文件冲突的解决方案

    在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果 ...

  5. C#读写文件的方法汇总_C#教程_脚本之家

    C#读写文件的方法汇总_C#教程_脚本之家 http://www.jb51.net/article/34936.htm

  6. Inno Setup 如何读写文件

    软件安装的实质就是拷贝,对于简单的打包当然不需要考虑修改某(配置)文件.通过inno修改文件的目的在于把安装时相关信息写入文件中,提供其它应用的读取,而这些信息也只能在安装时才能确定,比如安装用户选择 ...

  7. java使用IO读写文件总结

    每次用到IO的读写文件都老忘记写法,都要翻过往笔记,今天总结下,省的以后老忘.java读写文件的IO流分两大类,字节流和字符流,基类分别是字符:Reader和Writer:字节:InputStream ...

  8. python读写文件时中文的转码问题

    读写文件都要将中文转为unicode字符. 读文件: u = unicode(s, 'gbk') 这里不能使用encode 写文件: u = encode('utf')

  9. JAVA基础学习之流的简述及演示案例、用缓冲区方法buffer读写文件、File类对象的使用、Serializable标记接口(6)

    1.流的简述及演示案例输入流和输出流相对于内存设备而言.将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出.字符流的由来:其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表. ...

  10. c# 高效读写文件

    一.同步读写文件(在并发情况下不会发生文件被占用异常) static void Main(string[] args) { Parallel.For(0, 10000, e => { strin ...

随机推荐

  1. k8s调度器、预选策略及调度方式

    一.k8s调度流程 1.(预选)先排除完全不符合pod运行要求的节点2.(优先)根据一系列算法,算出node的得分,最高没有相同的,就直接选择3.上一步有相同的话,就随机选一个 二.调度方式 1.no ...

  2. 老男孩python学习自修第十四天【序列化和json】

    序列化是使用二进制的方式加密列表,字典或集合,反序列化是解密的过程:序列化开启了两个独立进程进行数据交互的通路 使用pickle进行序列化和反序列化 例如: pickle_test.py #!/usr ...

  3. Yii2控制台命令

    Yii2控制台表格输出: 例如: $in_sheet_number_queue = []; $wms_material_in_sheet_list = \core\models\WmsMaterial ...

  4. Delphi窗体之间互相调用的简单问题

    问题是这样的,我的程序主窗口Form1上面有一个数据连接(ADOCONNECTION1)和ADOQUERY,然后还有一些数据感知组件用于浏览用的,我打算点击From1中的一个“修改数据”按钮,就弹出F ...

  5. vue ajax

    局部get: this.$http.get(url,{param:jsonData}).then(successCallback,failCallBack) 局部post: this.$http.po ...

  6. Simple Use IEnumerable<T>

    Private static IEnumerable<T> FunDemo(T para) { while(...) { .... yield return Obj; } } static ...

  7. luogu1503

    P1503 鬼子进村 题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. ...

  8. JavaScript知识点总结[部分]

    变量 局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量. <script type="text/javascript"> // 全局变量 n ...

  9. mfs 使用心得

    CentOS的安装方法: To install MooseFS from officially supported repository on EL7, follow the steps below: ...

  10. Codeforces Round #446 Div. 1

    B:即使看到n<=22也应该猜到这只是为了写spj.将每个数替换为恰好比他大的数即可,最大值替换为最小值.这样原序列中不包含最小值的集合显然都满足条件,并且容易发现包含最小值的集合的变化量都是最 ...