LINUX 读写文件
来源:互联网 发布:放苹果问题 c语言 编辑:程序博客网 时间:2024/06/08 15:31
在UNIX环境中读写文件,首先需要打开文件,打开文件用到的方法是
#include <fcntl.h>int open(const char *pathname, int flag);int open(const char *pathname, int flag, mode_t mode);//只有新创建文件时才会使用该函数//返回值,如果成功返回文件描述符,如果出错返回-1
参数说明:
pathname:文件的路径。
flag:文件打开的方式。
mode:创建新文件时新文件权限。
返回值:如果成功打开,则返回文件描述符,否则返回-1。
其中flag参数是由一个或多个标识位的按位或组合。它支持三种访问的模式:O_RDONLY,O_WRONLY,或O_RDWR。
下面的常量是可选的:
O_APPEND 每次写操作都写入文件的末尾。
O_CREAT 如果指定文件不存在,则创建这个文件。如果存在则直接打开文件。如果创建新文件,而mode参数没有指定,
则创建的文件权限不定。
O_EXCL 如果文件不存在,则返回错误。如果同时指定了O_CREAT,而文件已经存在,则会出错。 用此测试一个文件
是否存在,如果不存在,则创建此文件。
O_TRUNC 如果文件存在,并且以只写/读写方式打开,则清空文件全部内容。
O_NOCTTY 如果路径名指向终端设备,不要把这个设备用作控制终端。
O_NONBLOCK 如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式(nonblocking mode)。
下面三个标志也是可选的,他们是Single UNIX Specification中同步输入和输出选项的一部分:
O_DSYNC 等待物理 I/O 结束后再 write。在不影响读取新写入的数据的前提下,不等待文件属性更新。
O_RSYNC read 等待所有写入同一区域的写操作完成后再进行。
O_SYNC 等待物理 I/O 结束后再 write,包括更新文件属性的 I/O。
可选参数可以和必选参数一起使用,并且可以使用多个,如果要以读写方式打开一个文件,如果该文件已经存在,则
将文件清空,如果没有存在,则新创建文件,flag应该为:O_WRONLY | O_CREAT | O_TRUNC
mode用于在创建新文件时指定文件的权限,参数的:
#include<unistd.h>ssize_t read(int fd,void *buf,size_t len);参数说明:
fd:要读取的文件的文件描述符
buf:存放读取的内容
len:读取的字数,如果为0则read()不起作用并返回0
返回值是读取的字节数。
写文件时需要使用的函数是:
#include<unistd.h>ssize_t write(int fd,const void *buf,size_t len);参数说明:
与read基本相同
返回值是写入的字节数
关闭文件用到的函数:
#include<unistd.h>int close(int fd);参数说明:
fd:文件描述符。
返回值:如果关闭成功返回0,失败返回-1。
下面给出一个读写文件的例子
#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include <string.h>int main(){ int fd1,fd2;//读入文件和写入文件的文件描述符 char inBuf[100];//读文件的缓冲区 int readflag1,readflag2;// int closeflag1,closeflag2;//关闭文件的标识位 ssize_t readlen;//读取的字节长度 fd1 = open("/Users/yinfeng/Desktop/demo.txt",O_RDONLY); fd2 = open("/Users/yinfeng/Desktop/demo1.txt",O_CREAT|O_APPEND|O_WRONLY,S_IRWXU); memset(inBuf,0,100); while(1) { readlen = read(fd1,inBuf,100);//每次从fd1的文件中读取100个字节到inBuf中,返回读取成功的字节数 write(fd2,inBuf,readlen);//把inBuf的数据写入fd2文件中 memset(inBuf,0,100); if(readlen <= 0) { break; } } closeflag1 = close(fd1); closeflag2 = close(fd2); if(closeflag1 == 0 && closeflag2 ==0) { printf("close success\n"); } else { printf("close error"); }// nr = read(flag,); return 0;}
- linux 文件读写
- linux文件读写浅析
- linux文件读写浅析
- Linux内核读写文件
- Linux内核读写文件
- linux文件读写浅析
- linux文件读写浅析
- linux文件读写浅析
- Linux内核读写文件
- linux读写大文件
- linux文件读写浅析
- Linux驱动 读写文件
- linux读写大文件
- linux文件读写浅析
- linux文件读写浅析
- linux文件读写浅析
- linux文件读写浅析
- linux 读写文件接口
- 轻松搞定面试中的二叉树题目
- 工作感悟——SQL语句
- android学习--消息机制Handler Loop MesssageQueue
- [Java]正则表达式详解
- 二叉树遍历
- LINUX 读写文件
- sql中的保留字
- 事件对象的兼容写法
- json学习总结
- Codeforces 463C. Gargari and Bishops
- 【牛腩新闻发布系统】一步步演化的SQLHelper
- 轻松搞定面试中的链表题目
- Android 可在全屏幕自由拖动的view
- Yale开放课程博弈论3