fread()(读)
#include <stdio.h>
size_t fread(void*ptr,size_t size,size_t nmemb,FILE*stream);
功能:
以数据块的方式从文本中读取内容
参数:
ptr:存放读取出来的数据的内存空间
size:size_t为unsigned int 类型,此参数指定读取文件内容的块数据大小
nmemb:读取文件的块数,读取文件数据总大小为:size*nmemb
stream:已经打开的文件指针
返回值:
成功:实际成功读到的内容的块数,如果此值比nmemb小,但大于0,说明读到文件的结尾
失败:0
fwrite()(写)
#include <stdio.h>
size_t fwrite(const void*ptr,size_t size,size_t nmemb,FILE* stream);
功能:
以数据快的方式给文件写入内存
参数:
ptr:准备写入文件数据的地址
size:size_t为unsigned int 类型,此参数指定写入文件内容的块数据大小
nmemb:写入文件的块数,写入文件数据总大小为:size*nmemb
stream:已经打开的文件指针
返回值:
成功:实际成功写入文件数据的块数目,此值和nmemb相等
失败:0
二进制拷贝例:
int main(int argc,char* argv[])
{
if (argc < 3)
return -1;
unsigned int start_time = time(NULL);
FILE* f1=fopen(argv[1],"wb");
FILE* f2 = fopen(argv[2], "rb");
if (!f1||!f2)
return -2;
char ch[1024];
while (!feof(f1))
{
memset(ch, 0, 1024);
int len=fread(ch, 1, 1024, f1);
fwrite(ch, len, 1, f2);
}
unsigned int end_time = time(NULL);
printf("用时:%d(s)\n", end_time - start_time);
return EXIT_SUCCESS;
}
stat()获取文件状态
#include<sys/types.h>
#include<sys/stat.h>
int stat(const char*path,struct stat*buf);
功能:
获取文件状态信息
参数:
path:文件名
buf:保存文件信息的结构体
返回值:
成功:0
失败:-1
系统提供的stat结构体
struct stat
{
dev_t st_dev; //文件的设备编号
ino_t st_ino; //节点
mode_t st_mode;//文件的类型和存取的权限
nlink_t st_nlink;//连到该文件的硬连接数目,刚建立的文件值为1
uid_t st_uid;//用户ID
gid_t st_gid;//组ID
dev_t st_rdev;//(设备类型)若此文件为设备文件,则为其设备编号
off_t st_size //文件字节数(文件大小)
unsigned long st _blksize; //块大小(文件系统的I/O缓冲区大小)
unsigned long st _blocks; //块数
time_t st_atime; //最后一次访问时间
time_t st_mtime; //最后一次修改时间
time_t st_ctime; //最后一次改变时间(指属性)
}
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<sys/types.h>
#include<sys/stat.h>
#define MAX 1024*1024*10
int main(int argc,char* argv[])
{
if (argc < 3)
return -1;
unsigned int start_time = time(NULL);
struct stat s;
stat(argv[1], &s);
int len = s.st_size<MAX?s.st_size:MAX;
FILE* f1=fopen(argv[1],"wb");
FILE* f2 = fopen(argv[2], "rb");
if (!f1||!f2)
return -2;
char *ch=malloc(sizeof(char)*len);
while (!feof(f1))
{
memset(ch, 0, len);
int leng = fread(ch, len,1, f1);
fwrite(ch, leng, 1, f2);
}
fclose(f1);
fclose(f2);
unsigned int end_time = time(NULL);
printf("用时:%d(s)\n", end_time - start_time);
return EXIT_SUCCESS;
}
fseek()文件的随机读写
#include <stdio.h>
int fseek(FILE*stream,long offset,int whence);
功能:
移动文件流(文件光标)的读写位置
参数:
stream:已经打开的文件指针
offset:根据whence来移动的位移数(偏移量),可以是正数,也可以是负数,如果正数,则相对于whence往右移动,如果是负数,则相对于whence往左移动,如果向前移动的字节数超过了文件开头则出错返回,如果向后移动的字节数超过了文件末尾,再次写入时将增大文件尺寸。
whence:取值如下:
SEEK_SET:从文件开头移动offset个字节
SEEK_CUR:从当前位置移动offset个字节
SEEK_END:从文件末尾移动offset个字节
返回值:
成功:0
失败:-1
ftell()(获取文件流位置)
#include<stdio.h>
long ftell(FILE*stream);
功能:
获取文件流(文件光标)的读写位置
参数:
stream:已经打开的文件指针
返回值:
成功:当前文件流(文件光标)的读写位置
失败:-1
rewind()把文件流位置移动到文件开头
#include<stdio.h>
void rewind(FILE*stream);
功能:
把文件流(文件光标)的读写位置移动到文件开头
参数:
stream:已经打开的文件指针
返回值:
无返回值
remove()(删除)
include <stdio.h>
int remove(const char*prthname);
功能:
删除文件
参数:
pathname:文件名
返回值:
成功:0
失败:-1
rename()(重命名)
#include <stdio.h>
int rename(const char* oldpath,const char*newpath);
功能:
把oldpath的文件名改为newpath
参数:
oldpath:旧文件名
newpath:新文件名
返回值:
成功:0
失败:-1
fflush()更新缓冲区
#include<stdio.h>
int fflush(FILE*stream);
功能:
更新缓冲区,让缓冲区的数据立马写到文件中
参数:
stream:文件指针
返回值:
成功:0
失败:-1