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