目录
下一篇:c语言位操作
用>和<做重定向
演示:输入和输出
int num;
scanf("%i",&num);
printf("%d\n",num);
return 0;
./test > 12.out
重定向输出到12.out
输入:
就没有了输出
输入到了12.out里面
我们用重定向>将12345写入到12.in里面去,ctrl+d结束掉
查看
我们把12.in作为输入到上面那个程序里去
就直接输出了123
同样可以./test < 12.in > 12.out
输入和输出就都变成文件了
FILE
stdio.h已经声明好了这个类型
一、打开文件的标准代码
//一个指针fp指向一个FILE(一个结构代表打开文件的信息)
//fp有fopen函数打开一个文件file参数表示文件名,r表示用来读
//如果没有打开就返回null
FILE *fp=fopen("file","r");
if (fp){
//如果不是null
fscanf(fp,...);
fclose(fp);
} else{
//是null
...
}
例子:
#include <stdio.h>
int main(int argc,char const* argv[])
{
FILE *fp=fopen("12.in","r");//r表示读
if (fp){
//如果不是null
int num;
fscanf(fp,"%d\n",&num);//读文件
printf("%d\n",num);
fclose(fp);
} else{//是null
printf("无法打开文件!\n");
}
return 0;
}
效果:
注意:在windows下尝试了很多次都打不开最后改为绝对路径就打开了,这个问题有待考究
fopen函数
二进制文件
所有文件都是二进制的
文本是最简单的方式可以读写的文件
二进制文件VS文本
历史:dos用二进制,Unix用文本写配置文件
文本优势:方便人类,跨平台
缺点:输入输出要格式啊,开销大
二进制缺点:人类读写困难,且不跨平台
int的大小不一致,大小端问题
优点:程序读写快
程序为什么要文件?
配置:Unix用文本,windows用注册表
数据:稍稍有点量的数据都放数据库了
媒体:这个只能是二进制
现实是,程序通过第三方库读写文件,很少直接读写二进制文件了
如果一定要写
用以下函数
fread和fwrite
它们的参数基本一致
二进制读写
第一个参数是要读或写的内存,第二个是内存大小,第三个是又多少个这样的内存,最后是文件指针
返回值是成功读写了多少个字节
为什么要写nitem?
因为二进制文件的读写一般都是通过对一个结构变量的操作来进行的,nitem用来说明这次读写几个结构变量
fwrite就是以二进制写入文件,打开查看也是二进制
在文件中定位
ftell,得到现在所在的位置fseek
例如:fseek(fp,0L,SEEK_END) //代表从尾算起第零个
ftell(fp)现在也就是得到了文件尾的位置,也就是文件大小