DAY2
常见的标准IO函数
FIFE *fopen(const char *path, const char *mode);
/*
path: 打开文件路径
mode: 打开文件模式
*/
int fclose(FIFE *stream)
// 关闭当前文件流
int fgetc(FIFE *stream)
// 读取一个字符,返回该字符转换为int类型的值
int fputc(int c, FIFE *stream);
// 把c转换为对应的字符,写到stream里
char *fgets(char *s, int size, FIFE *stream);
// 读到换行符或者EOF截止,结果保存到s中,会多保存一个'\0'
int fputs(const char *s, FIFE *stream);
// 把s除去'\0'之外的字符写到stream里
size_t fread(void *ptr, size_t size, size_t nmemb, FIFE *stream);
// 读nmemb个元素,每个大小size字节,保存到ptr里
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FIFE *stream);
// 写nmemb个元素,每个大小size字节,写到stream里
// 文件位置指针相关:
int fseek(FIFE *stream, long offset, int whence)
long ftell(FIFE *stream)
void rewind(FIFE *stream)
int fflush(FIFE *stream)
// printf/scanf一族
int printf(const char *format);
int fprintf(FIFE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...); //可以看成是atoi的反向函数
//sprintf()可能会造成缓冲区溢出
int snprintf(char *str, size_t size, const char *format, ...);
int scanf(const char *format, ...);\
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char* format, ...);
1.1 按对象读取
读:
size_t fread(void *ptr, size_t size, size_t nmemb, FIFE *stream);
// 读nmemb个元素,每个大小size字节,保存到ptr里
ptr内存空间 缓冲区地址
返回值:成功返回读的对象个数,失败,非正数
size:字节
nmemb:对象个数
stream:流
写:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FIFE *stream);
// 写nmemb个元素,每个大小size字节,写到stream里
1.2 报告文件位置
long ftell(FILE*stream)
功能:查询“光标”位置
返回值:光标位置;
stream:流
1.3 文件偏移
int fseek(FILE*stream,long offset,int whence)
功能:光标移动
offset:偏移量
whence:基础位置
seek_set 头位置
seek_cut 当前位置
seek_end 末尾位置
文件IO
直接的系统调用
open/close/read/write/lseek
2.1 open
int open(char *pathname,int flags)
功能:打开文件,产生文件描述符
描述符:标记打开文件的数字
0---标准输入 1 -----输出 2-----出错
返回值:成功返回描述符,失败返回-1
pathname:文件名路径
flags:打开文件的权限或方式
包含其中一个:
0_RDONLY:只读
O_WRONLY:写
O_RDWR:读写
O_CREAT:文件不存在则创建
mode:主要O_CREAT出现才用
表示创建文件的权限0777
2.2 read
ssize_t read(int fd,viod *buf,size_t count)
功能:从打开的文件描述符读取文件内容
返回值:成功返回读到的字节数,失败返回-1
fd:已经打开的文件描述符
buf:存放的内容的缓冲区
count:预计读的字节数
count不能超过buf的字节大小
2.2 write
ssize_t write(int fd,const viod *buf,size_t count)
功能:从打开的文件描述符写文件内容
返回值:成功返回读到的字节数,失败返回-1
fd:已经打开的文件描述符
buf:存放的内容的缓冲区
count:预计读的字节数
count不能超过buf的字节大小
2.4 close
int close(int fd);
功能:关闭打开文件的标识符
返回值:0/1
fd:已经打开的文件描述符
2.5 lseek
off_t lseek(int fd,long offset,int whence)
功能:文件内部光标 偏移
返回值:非负数/-1
fd:偏移的文件的文件描述符
offset:偏移量
whence:基础位置
SEEK_SET
SEEK_CUR
SEEK_END
3目录操作
3.1 opendir
DIR * opendir(const char *pathname);
功能:打开目录文件,产生目录的流
返回值:成功返回流指针,失败返回NULL
patnname:指定目录的路径
3.2 readdir
struct dirent *readdir(DIR *dirp);
功能:读一次目录流,得到文件信息
返回值:成功返回文件结构体信息,失败NULL
dirp:打开的目录流
4 库文件
4.1 静态库
gcc -c hello main.c -o hello.o
-I: 指定头文件的路径
-L:指定库文件的路径
-l:链接某个具体的库
4.2动态库
ggc -fpic -wall -c hello.c
gcc - share -o libmyhello.so hello.o
gcc main.c -l,-lmyhello
可以把动态库文件放在
静态库和动态库重名时,默认链接动态库,需要链接静态库,在编译链接加上static