1.标准IO
1.打开文件 fopen
2.读写文件 fgetc fputc
fgets fputs
fscanf fprintf
fread fwrite
3.关闭文件 fclose
2.流的定位:
偏移量:读和写都在偏移量的位置进行
int fseek(FILE *stream, long offset, int whence);
功能:
设置流的偏移量
参数:
stream:文件流指针
offset:偏移量
whence:
SEEK_SET 文件开头
SEEK_CUR 当前位置
SEEK_END 文件结尾
返回值:
成功返回当前偏移量
失败返回-1
long ftell(FILE *stream);
功能:
获取流的偏移量
void rewind(FILE *stream);
功能:
将流的偏移量重新设置到开头
fseek(fp, 0, SEEK_SET);
练习:
编写程序随便给定一个bmp图片文件名获得图片的宽度和高度
#include<stdio.h>
int main(void)
{
FILE *fp = NULL;
int a= 0;
FILE *p = NULL;
fp = fopen("suibian.bmp", "r");
if(NULL == fp)
{
printf("faile \n");
return -1;
}
fseek(fp, 18, SEEK_SET);
fread( &a, 4, 1, fp);
fprintf(stdout, "%d\n", a);
fread( &a, 4, 1, fp);
fprintf(stdout, "%d\n", a);
fclose(fp);
return 0;
}
文件IO
1.打开文件:
open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能:
打开文件,返回文件描述符
参数:
pathname:文件路径
flags:打开方式
必须包含:O_RDONLY、O_WRONLY、O_RDWR 三个其中之一
O_CREAT 文件不存在创建
O_TRUNC 文件存在清0
O_APPEND 追加
O_EXCL 文件存在报错
O_NONBLOCK 非阻塞
O_ASYNC 异步IO
..
mode:权限
只要有O_CREAT标识,表示需要加上权限:
rwx rwx rwx
rw- rw- r--
110 110 100
0 6 6 4
返回值:
成功返回文件描述符
失败返回-1
文件描述符:很小的非负整数,而且新的文件描述符总是尚未被使用的最小的非负整数
2.close
int close(int fd);
功能:
关闭文件描述符
成功返回0
失败返回-1
3.write
ssize_t write(int fd, const void *buf, size_t count);
功能:
向文件描述符中写入buf开始的count个字节
参数:
fd:文件描述符
buf:写入的数据
count:写入的字节数
返回值:
成功返回写入的字节数
失败返回-1
4.read
ssize_t read(int fd, void *buf, size_t count);
功能:
从文件描述符中读取数据到buf开始的空间中,最多读取count个字节
参数:
fd:文件描述符
buf:存放数据空间首地址
count:最多读取的字节数
返回值:
成功返回读取的字节数
读到文件末尾返回0
失败返回-1
5.lseek
off_t lseek(int fd, off_t offset, int whence);
功能:
修改文件描述符对应的偏移量
参数:
fd:文件描述符
offset:偏移量
whence:
SEEK_SET:从文件开头开始偏移
SEEK_CUR:从当前位置开始偏移
SEEK_END:从文件末尾开始偏移
返回值:
成功返回当前的偏移量
失败返回-1
6.标准IO和文件的区别:
fopen -> open
fgetc/fputc -> read/write
fgets/fputs
fscanf/fprintf
fread/fwrite
fclose -> close
fseek -> lseek
rewind
ftell
1.标准IO是库函数
2.文件IO是系统调用
3.标准IO是针对于文件IO的封装
4.标准IO是有缓存的
5.文件IO是没有缓存的
6.标准IO主要用于操作普通文件
7.文件IO可以操作设备文件、进程间通信的文件、普通文件(Linux系统下的一切文件均可以使用文件IO)
库函数:是针对于系统调用的封装,可以在Windows或者Linux系统中使用
系统调用:是Linux内核中的函数接口,只能在Linux系统中使用
7.其余函数接口:
1.fileno
标准IO -> 文件IO
int fileno(FILE *stream);
功能:
获得文件流指针对应的文件描述符
2.fdopen
文件IO -> 标准IO
FILE *fdopen(int fd, const char *mode);
功能:
通过文件描述符获得文件流指针
3.feof
检测是否读到文件末尾
4.ferror
检测是否出错
5.clearerr
清除错误
1.Linux系统中时间的获取:
1.time
time_t time(time_t *tloc);
功能:
返回1970年1月1日到现在的秒数
参数:
tloc:存放秒数空间的首地址
返回值:
成功返回1970年1月1日到现在的秒数
失败返回-1
2.localtime
struct tm *localtime(const time_t *timep);
功能:
将秒数转换为本地时间
参数:
timep:存放秒数空间的首地址
返回值:
成功返回本地时间
失败返回NULL
3.mktime
time_t mktime(struct tm *tm);
功能:
根据日历时间转换为1970年1月1日到现在的秒数