operation
standard c
uccreate/
open
1. 開啟/建立新檔案 file*fopen(const char *filename,const char *type);
2. 重新開啟檔案:先關閉原檔案流並重新以fopen()方式開啟檔案
file *freopen(const char *filename, const char *type,file *sream);
3.rename更改檔名int rename(const char *oldname, const char *newname);
1. 建立: #include int creat(const char *filename, mode_t mode);
2.開啟:#include
int open (const char *pathname, int flags);
int open (const char *pathname, int flags, mode_t mode);
o_trunc檔案存在,刪除內容
close
int fclose(file *stream);
#incliude int close(int fd);
remove
int remove(const char * filename);
#incliude int unlink (char * path);
write
1).字元輸出#include//成功返回寫入值,否則返回eof
int putc(int c,file *stream);//將c轉換為unsigned char 型別後寫入stream流中,並移動一位指標 int putchar(int c); int fputc(int c,file *stream);
2).行輸出
//引數s指向一串以'\0'結尾的字元
int puts(cosnt char *s); //寫入stdout自動輸出\n
int fputs(const char *s,file *stream); //寫入stream中,不輸出\n
#include
char *strstr(char *s1,char *s2)返回s2第一次在s1中出現的位置的首位址
3).塊(block)寫(二進位制方式寫入/讀取)
成功返回n_items,否則返回值4).格式化寫: //等同printf()中內容輸出到檔案流/字串中
int fprintf(file *stream,const char *format,...);
int sprintf(char *s,const char format,...);
#incliude
int write(int fd, const void *buf, size_t length);
把length個位元組從buf寫到fd所指向的檔案中,返回值為實際寫入的位元組數。
read
1).字元輸入#include
結束/誤時返回eof(常數,一般為-1)
int getc(file *stream); //以unsigned char t讀取檔案內乙個字元,化為整數返回
int getchar(void); int fgetc(file *stream);
2).行輸入#include
a.錯誤/結束返回null,成功返回s指向的位址從stdin中讀取字串至s,
char *gets(char *s)
b.從標準輸入流中讀取字串至指定大小的s中,錯誤/結束返回null
char *fgets(char *s,int n,file *stream)
3).塊(block)讀(二進位制方式寫入/讀取)
//成功返回n_items,否則返回值小於n_items,從stream中讀入n_items個資料項到ptr所指記憶體中,大小為size/資料項
size_t fread(void *ptr,size_t size,size_t n_items, file *stream);
#incliude
int read (int fd, const void *buf, size_t length); //從fd所指定的檔案中讀取length個位元組到buf,返回值為實際讀取的位元組數
buffer
#include
//引出setbuf()、setvbuf()有效呼叫時期:stream尚 未開啟或未執行讀寫操作前
//設定檔案流緩衝區,大小為buf,若buf=null,則完全關閉緩衝區
void setbuf(file * stream,char *buf);
//設定stream的緩衝區和緩衝模式(由type決定: _iofbf全緩衝,_iolbf行緩衝,_ionbf無緩衝)
int setvbuf(file *stream, char *buf,int type, size_t size )
int fflush(file *stream); //重新整理緩衝區
#incliude
//將所有寫入檔案fildes中資料真正寫入磁碟中,類似於fflush(),成0敗-1
int fsync(int fildes)
seek
1)改變檔案的訪問位置,whence表明定位方式( seek—set 0當前位置 seek—cur 1和檔案末尾 seek—end 2),offset為偏移量
int fseek(file *stream,long int offset,int whence)
2)重置流stream,將檔案流定位於開始處 void rewind(file *stream);
3)獲取當前訪問位置,成功返回位置,否則-1: long int ftell(file * stream);
#incliude
//將讀寫指標相對whence移動offset個位元組。成功返回檔案指標相對於檔案頭的位置。
int lseek(int fd, offset_t offset, int whence);
whence 可用值: seek_set檔案開頭 seek_cur當前位置 seek_end檔案末尾
file desc
1).檔案的錯誤與結束狀態
int ferror(file *stream); //io錯誤時 !0,否則0
int feof(file *stream); //檔案結束時,返回 !0
void clearerr(file *stream); //清除stream錯誤和eof標誌
2).檔案的錯誤資訊 extern int errno; //表示錯誤**
#include char *strsrror(int errnum); //獲取錯誤的詳細資訊
1. 複製檔案描述符
#incliude
int dup(int fildes); int dup2(int fildes,int fildes2);
dup和dup2用於複製檔案描述符, dup2可以指定新的檔案描述符的數值,如果新的檔案描述符的值已經被使用,dup2會關閉掉後進行複製。dup和dup2不複製檔案表,只複製檔案描述符
file control(只有uc具備)
fcntl()對檔案描述符執行各種命令,cmd決定具體命令和有無第三引數
#include #include
/*cmd:① f_dupfd 複製檔案描述符,和dup2不同的是不會強行關閉已經使用的檔案描述符②f_getfd/f_setfd 獲取/設定檔案描述符標誌③f_getfl/f_setfl 獲取/設定檔案狀態標誌* / int fcntl(int fd, int cmd); int fcntl(int fd, int cmd,int arg);
int fcntl(int fd, int cmd,struct flock *arg); //f_setlk /f_getlk/f_setlkw獲取/設定檔案鎖,cmd值:f_setlk - 加鎖(鎖的型別是f_unlck時解鎖) f_setlkw - 加鎖
經驗:1)設定狀態時用位或| , 判斷存在用位與& 2)讀鎖是共享鎖,允許其他程序讀,但不允許寫,寫鎖是獨佔鎖,不允許其他程序讀寫
3)用fcntl()加鎖,cmd使用f_setlk/f_setlkw加鎖。c用結構體flock代表檔案鎖:
struct flock;
區別:① f_setlk加鎖時,非阻塞,如果鎖加不上,直接返回-1; ② f_setlkw加鎖時阻塞,如果鎖加不上,等待. ③ f_getlk - 測試鎖能不能加上(不是取鎖)
檔案鎖只是在程序中做了鎖定的標識,並沒有真正鎖定檔案,因此檔案鎖無法限定對檔案讀寫。
檔案鎖的用法:凡是呼叫read之前上讀鎖,呼叫write之前上寫鎖才能有效果。(fcntl(f_setlk)不會鎖定任何東西,但可以與另乙個fcntl(f_setlk) 呼應)
f_getlk - 測試乙個鎖能不能加上(不是取鎖),如果能加,不真正加鎖,把鎖的型別改為f_unlck返回,如果不能加鎖,返回當前正在使用的鎖(原因),並改變pid的值為正在使用的鎖的pid。
判斷鎖能否加上的條件是pid是否= -1
python的with檔案操作與上下文
帶有 with 關鍵字的語句,它通常用在對於系統資源如檔案 資料庫連線 socket而言,應用程式開啟這些資源並執行完業務邏輯之後,必須做的一件事就是要關閉 斷開 該資源。比如 python 程式開啟乙個檔案,往檔案中寫內容,寫完之後,就要關閉該檔案,否則會出現什麼情況呢?極端情況下會出現 too ...
linux下檔案壓縮與解壓操作
原文,來自於這裡 對於剛剛接觸linux的人來說,一定會給linux下一大堆各式各樣的檔名給搞暈。別個不說,單單就壓縮檔案為例,我們知道在windows下最常見的壓縮檔案就只有兩種,一是,zip,另乙個是.rap。可是linux就不同了,它有.gz tar.gz tgz bz2 z tar等眾多的壓...
C 檔案操作與C 的檔案操作
c filestream 檔案流 主要用於使用二進位制方式讀寫檔案資料,可讀取任何檔案 建立filestream物件 e 建立filestream物件 filemode 指定系統開啟檔案的方式filestream fileaccess 指定檔案的訪問方式 read唯讀,write只寫,readwri...