C语言文件操作

C语言缓冲区

  • 缓冲的类型
    1.全缓冲 _IOFBUF
    2.行缓冲 _IOLBUF
    3.无缓冲 _IONBUF
  • 标准输入输出
    1.stdin 0 标准输入
    2.stdout 1 标准输入
    3.stder 2 标准错误
  • 清空缓冲区
    fllush(buf); 刷新缓冲区并且把缓冲区的内容输出
    buf表示缓冲区例如 stdin stdout
  • 设置缓冲区
void setbuf(FILE*,char*buf );//文件指针 指定缓冲区 
void setbuffer(FILE*,char*buf,size_t size);// 全缓冲
void setlinebuf(FILE*);//行缓冲
  • IO权限 mode
    “w” 打开文件只写
    “w+” 打开文件或创建只写
    “wb+” 以二进制的方式打开写
    “r” 打开文件只读
    “r+” 打开或创建只读
    “rb+” 二进制
    “a” 追加的方式打开
    “a+” 追加的方式打开或创建
  • 文件操作代码
    FILE结构体
struct _iobuf {

    char *_ptr; //文件输入的下一个位置
    int _cnt; //当前缓冲区的相对位置
    char *_base; //指基础位置(即是文件的其始位置)
    int _flag; //文件标志
    int _file; //文件的有效性验证
    int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
    int _bufsiz; //???这个什么意思
    char *_tmpfname; //临时文件名

       };
typedef struct _iobuf FILE;

创建文件流指针

	FILE*file = fopen(const char*path,const  char*mode);
	//path指路经 mode以什么权限打开
	int fd = open(char*,int flags);     //linux
	int f = open(char*,int flags,mode_t mode);
flags:
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR 以可读写方式打开文件. 上述三种旗标是互斥的, 也就是不可同时使用, 但可与下列的旗标利用OR(|)运算符组合.
O_CREAT 若欲打开的文件不存在则自动建立该文件.
O_EXCL 如果O_CREAT 也被设置, 此指令会去检查文件是否存在. 文件若不存在则建立该文件, 否则将导致打开文件错误. 此外, 若O_CREAT 与O_EXCL 同时设置, 并且欲打开的文件为符号连接, 则会打开文件失败.
O_NOCTTY 如果欲打开的文件为终端机设备时, 则不会将该终端机当成进程控制终端机.
O_TRUNC 若文件存在并且以可写的方式打开时, 此旗标会令文件长度清为0, 而原来存于该文件的资料也会消失.
O_APPEND 当读写文件时会从文件尾开始移动, 也就是所写入的数据会以附加的方式加入到文件后面.
O_NONBLOCK 以不可阻断的方式打开文件, 也就是无论有无数据读取或等待, 都会立即返回进程之中.
O_NDELAY 同O_NONBLOCK.
O_SYNC 以同步的方式打开文件.
O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接, 则会令打开文件失败.
O_DIRECTORY 如果参数pathname 所指的文件并非为一目录, 则会令打开文件失败。
mode:
S_IRWXU00700 权限, 代表该文件所有者具有可读、可写及可执行的权限.
S_IRUSR 或S_IREAD, 00400 权限, 代表该文件所有者具有可读取的权限.
S_IWUSR 或S_IWRITE, 00200 权限, 代表该文件所有者具有可写入的权限.
S_IXUSR 或S_IEXEC, 00100 权限, 代表该文件所有者具有可执行的权限.
S_IRWXG 00070 权限, 代表该文件用户组具有可读、可写及可执行的权限.
S_IRGRP 00040 权限, 代表该文件用户组具有可读的权限.
S_IWGRP 00020 权限, 代表该文件用户组具有可写入的权限.
S_IXGRP 00010 权限, 代表该文件用户组具有可执行的权限.
S_IRWXO 00007 权限, 代表其他用户具有可读、可写及可执行的权限.
S_IROTH 00004 权限, 代表其他用户具有可读的权限
S_IWOTH 00002 权限, 代表其他用户具有可写入的权限.
S_IXOTH 00001 权限, 代表其他用户具有可执行的权限.

文件操作

	fgetc(FILE*,char);//从文件读出一个字符
	fputc(FILE*,char);//向文件写入一个字符
	fgets(FILE*,char* buf,int length); //从文件读出一行字符串 以'\n'结尾
	fputs(FILE*,char *buf,int length);//写入字符串
	fread(void* ptr,int size,int count,FILE *);
	/*
	ptr只用来存放读出数据的内存 内存最小为size
	size 读取元素的大小
	count 读取的个数
	*/	
	fwrite(vod *ptr,int size,int count,FILE*);
	//通用IO读写
	write(fd,char* buf,int length);
	read(fd,char* buf,int length);

文件光标操作


int feof(FILE*);//访问光标是否到达文件末尾

fseek(FIlE* Stream , long offset ,int whence); //设置光标位置
//offset 指推进或后退长度
//whence 表示位置  例如 SEEK_CUR当前位置 SEEK_END末尾 SEEK_SET 文件开始
long ftell(FILE*);//求当前光标位置距离文件开头的字节数
rewind(FILE*)     //光标复位


```
==关闭文件==
close(FILE*);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值