1,标准文件函数
打开和关闭文件 fopen, freopen, fclose
#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fields, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
int fclose(FILE *stream);
//freopen打开path指向的文件,并把它和stream指向的文件关联起来.并把文
件指针关闭后重新打开,使文件指针指向新的文件.可以用在重定向
stdout,stdin,stderr.
//fdopen函数把文件指针和文件描述符关联起来.
//fclose执行失败返回EOF.
读写文件 fread, fwrite
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);
//size指读写的字节数,而nmemb是指读写多少单位的size,故总的读写是它们乘
积.
获得文件状态 feof,ferror,clearerr
#include <stdio.h>
int feof(FILE *stream);
int ferror(FILE *stream);
void clearerr(FILE *stream);
int fileno(FILE *stream);
//fileno返回一个与流相关联的文件描述符.
//注意,把标准I/O库中的调用和其它I/O调用(如read, write)混合使用是不
明智,会导致出现不可预料的結果.如果要混用,保证在此之前调用fflush把
缓冲区内容强制写入到了物理设备.
2,输入输出调用
格式化输出
#include <stdio.h>
int printf(const char *format,...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
#include <stdarg.h>
int vprintf(const char *format, va_list ap);
int vfprintf(FILE *steram, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list
ap);
格式化输入
#include <stdio.h>
int scanf(const char *format, va_list ap);
int vsscanf(const char *str, const char *format, va_list ap);
int vfscanf(FILE *stream, const char *format, va_list ap);
//提醒:在一行中多余的数据可能被后续的scanf函数读入.,可以先把一
行数据请读入到字符串缓冲中,再用sscanf处理字符串缓冲.
字符输入输出
读写一个字符
#include <stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar(void);
int ungetc(int c, FILE *stream);
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar(int c);
行输入输出
#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
char *gets(char *s);
int fputs(const char *s, FILE *stream);
int puts(const char *s);
文件定位
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
long ftell(FILE *stream);
int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, fpos_t *pos);
void rewind(FILE *stream);
// ftell函数返回当前位置,rewind函数把文件指针设置为0,即起始位置.
缓冲区控制
共有三种缓冲区机制:无缓冲,行缓冲和块缓冲.
#include <stdio.h>
int fflush(FILE *stream);
int setbuf(FILE *stream, char *buf);
int setbuffer(FILE *stream, char *buf, size_t size);
int setlinebuf(FILE *stream);
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
//setvbuf中参数mode可取_IONBF(无缓冲),_IOLBF(行缓冲),_IOFBF(全缓
冲). 如果只改变流的缓冲模式,不触及缓冲地址,只需简调用缓冲地址为NULL的
setvbuf函数即可.
删除和改名 remove, rename
#include <stdio.h>
int remove(const char *pathname);
int rename(const char *oldpath, const char *newpath);
创建临时文件 tmpfile, tmpnam
#include <stdio.h>
FILE * tmpfile(void);
char *tmpnam(char *s);
#include <unistd.h>
int mkstemp(char *template);
char *mktemp(char *template);
//使用tmpnam时注意,可能会溢出.,tmpfile和tmpnam函数不能自主确定
保存文件的位置.它们可能会在诸如/tmp或/var/tmp 这样的共享目录下创建临时
文件或目录名.
//mktemp可以为文件名指定路径前缀,模板6个字符为"XXXXXX".
//mkstemp 先调用mktemp产生一个文件名,然后发出系统调用open,打开这个文
件.
3, 目录操作
找到当前目录 getcwd
#include <unistd.h>
char *getcwd(char *buf, size_t size);
//如果缓冲区不够容下整个路径名,则getcwd返回NULL,设置errno--ERANGE. 如
果buf为NULL,而size又小于0,getcwd使用malloc动态地为buf分配足够的内存.
要注意释放之.
改变目录 chdir ,fchdir
#include <unistd.h>
int chdir(const char *path);
int fchdir(int fd);
创建和删除目录
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/type.h>
int mkdir(const char *pathname, mode_t mode);
int rmdir(const char *pathname);
//待删除的目录须为空才执行成功.
获得目录列表 opendir, readdir, closedir
1,使用opendir函数打开目录文件
2,使用readdir函数读出目录文件的内容,如果还想从头开始,可以使用
rewinddir函数把文件指针重定位到目录文件的起始位置.
3,使用closedir函数关闭目录文件.
#include <dirent.h>
#include <sys/types.h>
DIR *opendir(const char *pathname);
struct dirent *readdir(DIR *dir);
int rewinddir(DIR *dir);
int closedir(DIR *dir); 本 |