文件和目录操作函数
?1,標(biāo)準(zhǔn)文件函數(shù)
打開和關(guān)閉文件 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指向的文件關(guān)聯(lián)起來。并把文
件指針關(guān)閉后重新打開,使文件指針指向新的文件。可以用在重定向
stdout,stdin,stderr.
//fdopen函數(shù)把文件指針和文件描述符關(guān)聯(lián)起來。
//fclose執(zhí)行失敗返回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指讀寫的字節(jié)數(shù),而nmemb是指讀寫多少單位的size,故總的讀寫是它們乘
積。
獲得文件狀態(tài) feof,ferror,clearerr
#include <stdio.h>
int feof(FILE *stream);
int ferror(FILE *stream);
void clearerr(FILE *stream);
int fileno(FILE *stream);
//fileno返回一個與流相關(guān)聯(lián)的文件描述符。
//注意,把標(biāo)準(zhǔn)I/O庫中的調(diào)用和其它I/O調(diào)用(如read, write)混合使用是不
明智,會導(dǎo)致出現(xiàn)不可預(yù)料的結(jié)果。如果必須要混用,保證在此之前調(diào)用fflush把
緩沖區(qū)內(nèi)容強(qiáng)制寫入到了物理設(shè)備。
2,輸入輸出調(diào)用
格式化輸出
#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);
//提醒:在一行中多余的數(shù)據(jù)可能被后續(xù)的scanf函數(shù)讀入。所以,可以先把一
行數(shù)據(jù)請讀入到字符串緩沖中,再用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函數(shù)返回當(dāng)前位置,rewind函數(shù)把文件指針設(shè)置為0,即起始位置。
緩沖區(qū)控制
共有三種緩沖區(qū)機(jī)制:無緩沖,行緩沖和塊緩沖。
#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中參數(shù)mode可取_IONBF(無緩沖),_IOLBF(行緩沖),_IOFBF(全緩
沖). 如果只改變流的緩沖模式,不觸及緩沖地址,只需簡調(diào)用緩沖地址為NULL的
setvbuf函數(shù)即可。
刪除和改名 remove, rename
#include <stdio.h>
int remove(const char *pathname);
int rename(const char *oldpath, const char *newpath);
創(chuàng)建臨時文件 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函數(shù)不能自主確定
保存文件的位置。它們可能會在諸如/tmp或/var/tmp 這樣的共享目錄下創(chuàng)建臨時
文件或目錄名。
//mktemp可以為文件名指定路徑前綴,模板最后6個字符必須為"XXXXXX".
//mkstemp 先調(diào)用mktemp產(chǎn)生一個文件名,然后發(fā)出系統(tǒng)調(diào)用open,打開這個文
件。
3, 目錄操作
找到當(dāng)前目錄 getcwd
#include <unistd.h>
char *getcwd(char *buf, size_t size);
//如果緩沖區(qū)不夠容下整個路徑名,則getcwd返回NULL,設(shè)置errno--ERANGE. 如
果buf為NULL,而size又小于0,getcwd使用malloc動態(tài)地為buf分配足夠的內(nèi)存。
要注意釋放之。
改變目錄 chdir ,fchdir
#include <unistd.h>
int chdir(const char *path);
int fchdir(int fd);
創(chuàng)建和刪除目錄
#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);
//待刪除的目錄須為空才執(zhí)行成功。
獲得目錄列表 opendir, readdir, closedir
1,使用opendir函數(shù)打開目錄文件
2,使用readdir函數(shù)讀出目錄文件的內(nèi)容,如果還想從頭開始,可以使用
rewinddir函數(shù)把文件指針重定位到目錄文件的起始位置。
3,使用closedir函數(shù)關(guān)閉目錄文件。
#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);?
轉(zhuǎn)載于:https://blog.51cto.com/noyear/405842
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
- 上一篇: 第四话 想不到办法,就研究规律 ver
- 下一篇: 网管,待遇为何如此差劲?