Unix/Linux下文件基本操作[zt]
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Unix/Linux下文件基本操作[zt]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            Unix/Linux下文件基本操作 來源: ChinaUnix博客  日期: 2008.06.16 17:16 (共有0條評論) 我要評論 
比較重要的設備文件有三個,它們是/dev/console、/dev/tty 和 /dev/null
1,/dev/console設備:系統控制臺,出錯和診斷信息通常會被發送到這個設備。
2,/dev/tty設備:進程控制終端的一個假名。
3,/dev/null:空設備,所以寫向這個設備的輸出都將被丟棄。而讀這個設備會立刻返回一個文件尾標志。
文件的系統調用函數:
文件描述符:
0:標準輸入;
1:標準輸出;
2:標準錯誤;
open系統調用:
建立一條到文件或者設備的訪問路徑,如果操作成功,它將返回一個文件描述符,后續的read,write等系統調用就將使用該文件描述符對打開的那個文件進行操作。
int open (const char *path,int oflags);
int open (const char *path,int oflags,mode_t mode);
oflags參數是通過把要求的文件訪問模式與其它可選模式按位or得到的。
文件訪問模式:O_RDONLY(只讀)O_WRONLY(只寫)O_RDWR(讀寫)
其它可選模式:
O_APPEND(把寫入的數據追加在文件的末尾)
O_TRUNC(把文件的長度設置為0,丟棄其中現有的內容)
O_CREAT(按mode中給出的模式創建文件)
O_EXCL(與o_creat一起使用,如果文件存在,open操作失敗)
mode參數:
S_IRUSR:讀權限,文件屬主
S_IWUSR:寫
S_IXUSR:執行權限,文件屬主
S_IRGRP:讀
S_IWGRP:寫
S_IXGRP:執行權限,文件所在分組
S_IROTH:讀
S_IWOTH:寫
S_IXOTH:執行權限,其它用戶
如:
open ("myfile", O_CREAT, S_IRUSR | S_IXOHT);
創建一個名為myfile的文件,文件的屬主擁有它的讀操作權限,其它用戶只能執行。Mode會受umask決定。(chmod umask myfile)
close系統調用:
終止一個文件描述符fildes與它文件之間的關聯。
int close (int fildes);
write系統調用:
把緩沖區BUF里的前nbytes個字節寫入與文件描敘符fildes相關聯的文件中去。
size_t write(int fildes,const void *buf ,size_t nbytes);
read系統調用:
與文件描敘符fildes相關聯的文件中的讀入前nbytes個數據讀,并把它們放到字節緩沖區BUF。它的返回值是實際讀入的字節數,它可能會小于nbytes的值。
size_t read(int fildes,const void *buf ,size_t nbytes);
ioctl系統調用:
提供一個對設備行為,設備描述符,設備底層服務的配置工作等方面進行控制的操作界面。
int ioctl(int fildes,int cmd, ... );
lseek,fstat,stat,lstat系統調用,先跳過;
標準IO庫:
fopen函數:
FILE *fopen(const char *filename,const char *mode);
打開模式有:
"r" "rb" 只讀方式打開
"w" "wb" 以寫方式打開,并把文件長度截短為零
"a" "ab" 以寫方式打開,新內容追加在文件尾
"r+" "rb+" "r+b" 以修改方式打開,(讀寫)
"w+" "wb+" "w+b" 以修改方式打開,并把文件長度截短為零
"a+" "ab+" "a+b" 以修改方式打開,新內容追加在文件尾
字母“b”表示文件是一個二進制文件。UNIX把所以文件都看成是二進制文件。
mode參數是一個字符串,所以要使用"r",而不是'r';
fread 函數:
size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
從文件流stream讀數據到ptr指定的數據緩存區里。它的返回值是成功地讀到數據緩存區里的記錄個數,而不是字節數。
fwrite函數:
size_t fwrite (const void *ptr, size_t size, size_t nitems, FILE *stream);
從指定數據緩存取數據寫到輸出流去。
fclose函數:
int fclose (FILE *stream);
關閉指定的文件流stream,使所以尚未寫出的數據都寫到文件里去。
fflush函數:
int fflush(FILE *stream);
把文件流里的現有數據立刻寫入文件。
fseek函數:
int fseek(FILE *stream, long int offset, int whence);
為下一次讀寫操作設置偏移位置。
fgetc,getc,getchar函數:
int fgetc(FILE *stream); 從文件流里取出下一個字節并把它當做一個字符返回。當它達到文件尾或出現錯誤時,返回EOF。
int getc (FILE *stream); 作用相當于fgetc,但我們可以在stream參數不允許有副作用的情況下把getc實現為一個宏。
int getchar(); 相當getc(stdin),
fputc,putc,putchar函數:
int fputc(int c, FILE *stream); 把一個字符寫到輸出文件流里,返回值為剛寫的那個值,失敗返回EOF。
int putc(int c, FILE *stream); 相當于fputc,但可以實現為一個宏。
int putchar(int c); 相當putc(stdout);
fgets,gets函數:
char* fgets(char *s,int n, FILE *stream);從輸入文件流讀取n-1個字符加上"\0"寫到s指向的字符串去。
char* gets(char *s);對傳輸的字符個數沒限制,避免使用!
printf ,scanf 等跳過。
chmod,chown 略。
unlink,link ,symlink系統調用:
int unlink (const char *path);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);
目錄相關操作函數:
mkdir,rmdir系統調用:
int mkdir (const char *path, mode_t mode);
int rmdir (const char *path);
chdir,getcwd系統調用:
int chdir(const char *path);改變工作目錄。
int *getcwd(char *buf,sizo_t size);把當前子目錄的名字寫到給定的BUF里。
掃描子目錄函數:
與子目錄相關的函數是在一個名為dirent.h的頭文件里被申明的。它們使用一個名為DIR的結構做為子目錄處理操作的基礎。“子目錄流”(directory stream)指向DIR結構的指針,被用來完成各種普通的子目錄操作。
opendir,readdir函數:
DIR * opendir(const char *name); 打開一個子目錄并建立一個子目錄流。
struct dirent *readdir(DIR *dirp); 返回一個結構體指針,結構體里保存著子目錄流dirp中下一個目錄數據項的有關資料。
telldir函數:
long int telldir (DIR *dirp); 返回值里記錄著子目錄流里的當前位置。可在seekdir調用里利用這個值對當前位置再做一次子目錄掃描。
seekdir函數:
void seekdir(DIR *dirp, long int loc);對dirp指定的子目錄流中的目錄數據項的指針進行設置,loc的值用來設置指針的位置。
closedir函數:
int closedir(DIR *dirp);關閉一個子目錄并釋放與之相關聯的資源。
mmap函數:將創建一個指向一段內存的指針,該指針將與通過一個打開的文件描述符來訪問的文件的內容相關聯。
void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
用傳遞off參數的辦法可以改變經共享內存段訪問的文件中數據的起始偏移值。
msync函數:把該內存段的某個部分或整段中的修改寫回到被映射文件里,(或者從被映射的文件里讀出)
int msync(void *addr, size_t len, int flags);
munmap函數:釋放內存段
int munmap(void *addr, size_t len);
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/62377/showart_1002983.html
                        
                        
                        比較重要的設備文件有三個,它們是/dev/console、/dev/tty 和 /dev/null
1,/dev/console設備:系統控制臺,出錯和診斷信息通常會被發送到這個設備。
2,/dev/tty設備:進程控制終端的一個假名。
3,/dev/null:空設備,所以寫向這個設備的輸出都將被丟棄。而讀這個設備會立刻返回一個文件尾標志。
文件的系統調用函數:
文件描述符:
0:標準輸入;
1:標準輸出;
2:標準錯誤;
open系統調用:
建立一條到文件或者設備的訪問路徑,如果操作成功,它將返回一個文件描述符,后續的read,write等系統調用就將使用該文件描述符對打開的那個文件進行操作。
int open (const char *path,int oflags);
int open (const char *path,int oflags,mode_t mode);
oflags參數是通過把要求的文件訪問模式與其它可選模式按位or得到的。
文件訪問模式:O_RDONLY(只讀)O_WRONLY(只寫)O_RDWR(讀寫)
其它可選模式:
O_APPEND(把寫入的數據追加在文件的末尾)
O_TRUNC(把文件的長度設置為0,丟棄其中現有的內容)
O_CREAT(按mode中給出的模式創建文件)
O_EXCL(與o_creat一起使用,如果文件存在,open操作失敗)
mode參數:
S_IRUSR:讀權限,文件屬主
S_IWUSR:寫
S_IXUSR:執行權限,文件屬主
S_IRGRP:讀
S_IWGRP:寫
S_IXGRP:執行權限,文件所在分組
S_IROTH:讀
S_IWOTH:寫
S_IXOTH:執行權限,其它用戶
如:
open ("myfile", O_CREAT, S_IRUSR | S_IXOHT);
創建一個名為myfile的文件,文件的屬主擁有它的讀操作權限,其它用戶只能執行。Mode會受umask決定。(chmod umask myfile)
close系統調用:
終止一個文件描述符fildes與它文件之間的關聯。
int close (int fildes);
write系統調用:
把緩沖區BUF里的前nbytes個字節寫入與文件描敘符fildes相關聯的文件中去。
size_t write(int fildes,const void *buf ,size_t nbytes);
read系統調用:
與文件描敘符fildes相關聯的文件中的讀入前nbytes個數據讀,并把它們放到字節緩沖區BUF。它的返回值是實際讀入的字節數,它可能會小于nbytes的值。
size_t read(int fildes,const void *buf ,size_t nbytes);
ioctl系統調用:
提供一個對設備行為,設備描述符,設備底層服務的配置工作等方面進行控制的操作界面。
int ioctl(int fildes,int cmd, ... );
lseek,fstat,stat,lstat系統調用,先跳過;
標準IO庫:
fopen函數:
FILE *fopen(const char *filename,const char *mode);
打開模式有:
"r" "rb" 只讀方式打開
"w" "wb" 以寫方式打開,并把文件長度截短為零
"a" "ab" 以寫方式打開,新內容追加在文件尾
"r+" "rb+" "r+b" 以修改方式打開,(讀寫)
"w+" "wb+" "w+b" 以修改方式打開,并把文件長度截短為零
"a+" "ab+" "a+b" 以修改方式打開,新內容追加在文件尾
字母“b”表示文件是一個二進制文件。UNIX把所以文件都看成是二進制文件。
mode參數是一個字符串,所以要使用"r",而不是'r';
fread 函數:
size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
從文件流stream讀數據到ptr指定的數據緩存區里。它的返回值是成功地讀到數據緩存區里的記錄個數,而不是字節數。
fwrite函數:
size_t fwrite (const void *ptr, size_t size, size_t nitems, FILE *stream);
從指定數據緩存取數據寫到輸出流去。
fclose函數:
int fclose (FILE *stream);
關閉指定的文件流stream,使所以尚未寫出的數據都寫到文件里去。
fflush函數:
int fflush(FILE *stream);
把文件流里的現有數據立刻寫入文件。
fseek函數:
int fseek(FILE *stream, long int offset, int whence);
為下一次讀寫操作設置偏移位置。
fgetc,getc,getchar函數:
int fgetc(FILE *stream); 從文件流里取出下一個字節并把它當做一個字符返回。當它達到文件尾或出現錯誤時,返回EOF。
int getc (FILE *stream); 作用相當于fgetc,但我們可以在stream參數不允許有副作用的情況下把getc實現為一個宏。
int getchar(); 相當getc(stdin),
fputc,putc,putchar函數:
int fputc(int c, FILE *stream); 把一個字符寫到輸出文件流里,返回值為剛寫的那個值,失敗返回EOF。
int putc(int c, FILE *stream); 相當于fputc,但可以實現為一個宏。
int putchar(int c); 相當putc(stdout);
fgets,gets函數:
char* fgets(char *s,int n, FILE *stream);從輸入文件流讀取n-1個字符加上"\0"寫到s指向的字符串去。
char* gets(char *s);對傳輸的字符個數沒限制,避免使用!
printf ,scanf 等跳過。
chmod,chown 略。
unlink,link ,symlink系統調用:
int unlink (const char *path);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);
目錄相關操作函數:
mkdir,rmdir系統調用:
int mkdir (const char *path, mode_t mode);
int rmdir (const char *path);
chdir,getcwd系統調用:
int chdir(const char *path);改變工作目錄。
int *getcwd(char *buf,sizo_t size);把當前子目錄的名字寫到給定的BUF里。
掃描子目錄函數:
與子目錄相關的函數是在一個名為dirent.h的頭文件里被申明的。它們使用一個名為DIR的結構做為子目錄處理操作的基礎。“子目錄流”(directory stream)指向DIR結構的指針,被用來完成各種普通的子目錄操作。
opendir,readdir函數:
DIR * opendir(const char *name); 打開一個子目錄并建立一個子目錄流。
struct dirent *readdir(DIR *dirp); 返回一個結構體指針,結構體里保存著子目錄流dirp中下一個目錄數據項的有關資料。
telldir函數:
long int telldir (DIR *dirp); 返回值里記錄著子目錄流里的當前位置。可在seekdir調用里利用這個值對當前位置再做一次子目錄掃描。
seekdir函數:
void seekdir(DIR *dirp, long int loc);對dirp指定的子目錄流中的目錄數據項的指針進行設置,loc的值用來設置指針的位置。
closedir函數:
int closedir(DIR *dirp);關閉一個子目錄并釋放與之相關聯的資源。
mmap函數:將創建一個指向一段內存的指針,該指針將與通過一個打開的文件描述符來訪問的文件的內容相關聯。
void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
用傳遞off參數的辦法可以改變經共享內存段訪問的文件中數據的起始偏移值。
msync函數:把該內存段的某個部分或整段中的修改寫回到被映射文件里,(或者從被映射的文件里讀出)
int msync(void *addr, size_t len, int flags);
munmap函數:釋放內存段
int munmap(void *addr, size_t len);
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/62377/showart_1002983.html
轉載于:https://blog.51cto.com/axlrose/1289315
總結
以上是生活随笔為你收集整理的Unix/Linux下文件基本操作[zt]的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: seasar一般性配置
- 下一篇: 自动化集成:Pipeline流水语法详解
