快速业务通道

文件和目录操作函数

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-09

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, ...);

Empire CMS,phome.net


#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);
Empire CMS,phome.net

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);
Empire CMS,phome.net

//待删除的目录须为空才执行成功.

获得目录列表 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);

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号