您的位置:首页 > 运维架构 > Linux

文件和目录操作函数

2010-10-14 19:55 507 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息