linux 继续~

文件操作
标准io(有缓存)
每当运行程序时系统都会默认打开三个流
FILE *fp=NULL; //FP 文件流指针
fp=fopen(“hello.txt”,“w+”);
if(fpNULL)
{
perror();
return -1;
}
stdin 0 默认分配的键盘 带缓存
stdout 1 默认分配的屏幕 带缓存
stderro 2 默认分配的屏幕 不带缓存
标准io的接口 ANSI c标准文件操作管理
内存清理函数:
char buff[123];
memset(&buff,0,sizeof(buff)) //内存写0
bzero(buff,sizeof(buff)) //内存区清零
fscanf(stdio,"%d %d %s",&i,&j,buff); 格式化标准输入
fflush(stdio) //吸收enter
fgetchar() //
//文件描述:
认识缓冲区: 就是一块内存区,在输入输出设备和cpu之间,用来缓存数据。
读写操作都要经过缓冲区满足一定条件(遇到‘\n’ 通过相关函数)后进行真正的写入和读出。如sd卡的读取,不是一个字节一个字节的读,而是满足一定的条件例如数据到达4m后,开始读取或遇到结束标志,开始读取。
标准输入输出流:程序开始运行时,会有三个默认打开的文件标识符。
0 :标准输入 stdin STDIN_FILENO 系统分配为键盘
1 :标准输出 stdio STDOUT_FILENO 系统分配为显示器
2 :标准错误 stderr STERROR_FILENO 系统分配为显示器
fflush() //清理缓冲区的函数 fflush(stdin) ffush(stdout)
FILE指针 定义:系统为打开文件建立的文件结构体,打开时返回来一个指针,程序通过指针获取文件信息
关闭后,文件结构体被释放
ANSI c 描述一个打开的文件,定义stdio.h
struct _iobuf
{ char *_ptr; //当前缓冲区内容指针 int _cnt; //缓冲区还有多少个字符
char *_base;//缓冲区的起始地址 int _flag;//文件流的状态,是否错误或结束
int _file; //文件描述符 int _charbuf; //双字节缓冲区,缓冲两个字节
int _bufsiz;//缓冲区大小 char *_tmpfname;//临时文件名
};
形式: typedef struct _iobuf FILE;
打开关闭:
API: fopen 原型:FILE *fopen(const char *path,const char *mode);
功能:打开由path指定的一个文件
头文件 #include<stdio.h>
参数:path :带路径的文件名
mode打开方式:r 打开只读文件,该文件必须存在
r+ 打开可读写的文件,该文件必须存在
w 打开只写文件,若文件存在则文件长度清零,即会擦除文件以前内容,若文件不存在则建立该文件
w+ 打开可读写文件,若文件存在则文件长度清零,即会擦除文件以前内容,若文件不存在则建立该文件
a 以附加的形式打开只写文件,若文件不存在,则会建立该文件,若文件存在写入的数据会被加到文件尾,即文件原先的内容会被保留
a+ 以附加的方式打开可读写的文件,若文件不存在则会建立该文件,若文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
返回值: 成功,返回操作文件的指针,失败返回NULL
fclose: 原型 int fclose(FILE *fp)
功能:关闭文件指针,释放资源
参数:fp :fopen返回的文件指针
返回值:成功返回0 失败返回-1
注意事项:有没有这个文件 你要进行的神魔操作
示例:
#include <stdio.h>
int main(int argc,char *argv[])
{
FILE *fp=NULL;
if(argc<2)
{
printf(“请输入正确的参数\n”);
return -1;
}
fp=fopen(argv[1],“r”);
if(fp
NULL)
{
perror(“fopen”);
return -1;
}
printf(“打开文件成功\n”);
fclose(fp);
return 0;
}
单个字符读写:
API: fputc : 原型 :int fputc(int c,FILE *stream)
头文件: #include<stdio.h>
功能:写一个字符到文件中
参数:c :要写入的字符
stream: 文件指针(要有可写权限)
返回值:成功:字符c 失败:eof(-1)
fgetc: 原型:int fgetc(FILE *stream)
头文件:#include<stdio.h>
功能:从文件读一个字符
返回值:成功:返回读出的字符 失败eof
feof: 原型:int feof(FILE *stream)
头文件:include <stdio.h>
功能:检查文件是否读取结束
参数:stream:指向待检查文件的指针
返回值: 文件未结束: 0
文件已结束 1 (注意区分 易出错)
例程:
#include <stdio.h>
int main(int argc,char *argv[])
{
char ch;
FILE *fp=NULL;
if(argc<2)
{
printf(“请输入正确的参数\n”);
return -1;
}
fp=fopen(argv[1],“w+”);
if(fp==NULL)
{
perror(“fopen”);
return -1;
}
printf(“打开文件成功\n”);
while(ch!=’#’)
{
fputc(ch,fp);
ch=getchar();
}
while(!feof(fp))
{
fputchar(ch);
ch=fgetc(fp);
}
fclose(fp);
return 0;
}
字符串读写: fgets 原型:char *fgets(char *s,int size,FILE *fp);
头文件:stdio.h
功能:从fp指向的文件中读出一行(最多size-1个字符),直到出现换行字符,读到文件尾或是
已经读了size-1个字符为止,写入s指向的缓冲区
参数:s保存读取到的字符
size要读取的字符的个数
fp文件流指针
返回值:成功,返回读取到的字符串 失败返回null
fputs 原型:int fputs(const char *s,FILE *fp)
功能:将字符串s写入fp指向的文件中
参数: s 要写入文件的缓冲区指针
fp 要写入的目标文件的流指针
块读块写:
fread 原型: size_t fread(void *ptr,size_t size,size_t num,FILE *fp)
功能:读文件
头文件:stdio.h
参数: ptr :要读入的缓冲区指针,提前申请好的
size 要读出的信息单元的大小,一般情况设为1
num 要读出的信息单元的个数,size *num不大于ptr的大小
返回值:成功返回读取到的信息单元的个数 失败返回EOF
fwrite 原型:size_t fwrite(void *ptr,sise_t size,size_t num,FILE *fp)
头文件:stdio.h
功能:写文件
参数: ptr:要写入的缓冲区指针,提前申请好的(可以bzero()一下)
size:要写入的信息单元的大小,一般设为1
num:要写入的信息单元的个数,size *num不大于ptr大小
fp:要写的文件指针,提前用fopen打开的
返回值:成功返回写入的信息单元的个数 失败返回EOF
格式化读写: fscanf(格式化输入)
int fscanf(FILE fp,const char format…)
fscanf从fp中格式化输入
fscanf(fd," %d %s",&c,buf); //将fd指向的文件里边的内容输入到buf中
fprintf(格式化输出)
int fprintf(FILE *fp,const char *format…)
示例:fprintf(fd,"%s",“who are you”)
sprintf(格式化字符串复制)
int sprintf(char str,const charformat…)
把某一类型的数据转换成字符串放在某一地址里
文件指针定位:
api: rewind void rewind(FILE *fp)
将读写指针定位到文件开始位置,无返回值
fseek 将读写指针定位到指定位置
fp: 要操作的文件
offset:偏移量(可正可负)
whence
参考位置:SEEK_SET 文件开头 //SEEK_CUR //文件当前位置SEEK_END 文件尾
ftell long ftell(FILE *fp)
返回当前文件读写指针的位置,常用来求文件的大小


文件io(无缓存)
接口: (posix接口文件操作)
系统调用接口 linux下一切皆文件
中间没有经过缓冲区 实时性高
非常安全和快
打开关闭:
open 原型: int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
头文件: (man 2 open)
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
参数: pathname:要打开文件的路径(相对路径 绝对路径)
flag(动作标志) O_RDONLY 读
O_WRONLY 写
O_RDWR 读写
O_CREAT 没有就创建,有就访问
O_EXCL 和O_CREAT连用
O_TRUNC 将文件截取为0(如果有内容就清空里边的内容)
O_APPEND 追加的方式打开
如果想要两个以上连用只需加|
mode(权限) 当第二个参数有O_CREAT表示,创建文件的时候要给文件权限
返回值:成功返回文件描述符 失败返回-1
close 原型:void close(int fd)
功能:关闭一个打开的文件
头文件:unistd.h
读写操作:
read 原型:ssize_t read(int fd,void *buf,size_t count)
头文件: #include <unistd.h>
功能:读文件内容到buf
参数:fd 要读文件的路径(绝对路径 相对路径)
buf 要读入的缓冲区 提前申请好的
count 要读入的字节数
返回值:成功返回实际读的字节数 失败返回-1
wirte 原型: ssize_t write(int fd,const void *buf,size_t count)
功能:将buf内容写入文件
头文件:unistd,h
参数: fd :打开成功的文件描述符
buf:要写入的数据,提前申请好的
count:写入的数量
返回值:成功返回实际读写的字节数 失败返回-1
指针定位:lseek 原型:off_t lseek(int fd,off_t offset,int whence)
功能:调整或得到文件当前读写位置
头文件: sys/types.h unistd.h
参数:fd:用open打开的文件描述符
offset :想要调整的文件读写位置的相对偏移,-左+右
whence:调整文件读写位置的基准
SEEK_SET 当前位置为文件的开头
SEEK_CUR 当前位置为文件指针的位置
SEEK_END 当前位置为文件的结尾

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值