應用C說話操作文件的根本函數整頓。本站提示廣大學習愛好者:(應用C說話操作文件的根本函數整頓)文章只能為提供參考,不一定能成為您想要的結果。以下是應用C說話操作文件的根本函數整頓正文
C說話creat()函數:創立文件函數
頭文件:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>
界說函數:
int creat(const char * pathname, mode_tmode);
函數解釋:
1、參數 pathname 指向欲樹立的文件途徑字符串。
2、Creat()相當於應用以下的挪用方法挪用open()
open(const char * pathname, (O_CREAT|O_WRONLY|O_TRUNC));
毛病代碼:關於參數 mode 請參考open()函數.
前往值:
- creat()會前往新的文件描寫詞, 如有毛病產生則會前往-1, 並把毛病代碼設給errno.
- EEXIST參數:pathname 所指的文件已存在.
- EACCESS參數:pathname 所指定的文件不相符所請求測試的權限
- EROFS:欲翻開寫入權限的文件存在於只讀文件體系內
- EFAULT參數:pathname 指針超越可存取的內存空間
- EINVAL參數:mode 不准確.
- ENAMETOOLONG參數:pathname 太長.
- ENOTDIR 參數:pathname 為一目次
- ENOMEM :焦點內存缺乏
- ELOOP 參數:pathname 有過量符號銜接成績.
- EMFILE:已到達過程可同時翻開的文件數下限
- ENFILE:已到達體系可同時翻開的文件數下限
附加解釋:creat()沒法樹立特殊的裝配文件, 假如須要請應用mknod().
C說話open()函數:翻開文件函數
頭文件:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>
界說函數:
int open(const char * pathname, int flags);
int open(const char * pathname, int flags, mode_t mode);
函數解釋:
參數 pathname 指向欲翻開的文件途徑字符串. 以下是參數flags 所能應用的旗標:
- O_RDONLY 以只讀方法翻開文件
- O_WRONLY 以只寫方法翻開文件
- O_RDWR 以可讀寫方法翻開文件. 上述三種旗標是互斥的, 也就是弗成同時應用, 但可與以下的旗標應用OR(|)運算符組合.
- O_CREAT 若欲翻開的文件不存在則主動樹立該文件.
- O_EXCL 假如O_CREAT 也被設置, 此指令會去檢討文件能否存在. 文件若不存在則樹立該文件, 不然將招致翻開文件毛病. 另外, 若O_CREAT 與O_EXCL 同時設置, 而且欲翻開的文件為符號銜接, 則會翻開文件掉敗.
- O_NOCTTY 假如欲翻開的文件為終端機裝備時, 則不會將該終端機當做過程掌握終端機.
- O_TRUNC 若文件存在而且以可寫的方法翻開時, 此旗標會令文件長度清為0, 而本來存於該文件的材料也會消逝.
- O_APPEND 當讀寫文件時會從文件尾開端挪動, 也就是所寫入的數據會以附加的方法參加到文件前面.
- O_NONBLOCK 以弗成阻斷的方法翻開文件, 也就是不管有沒有數據讀取或期待, 都邑立刻前往過程當中.
- O_NDELAY 同O_NONBLOCK.
- O_SYNC 以同步的方法翻開文件.
- O_NOFOLLOW 假如參數pathname 所指的文件為一符號銜接, 則會令翻開文件掉敗.
- O_DIRECTORY 假如參數pathname 所指的文件並不是為一目次, 則會令翻開文件掉敗。注:此為Linux2. 2 今後獨有的旗標, 以免一些體系平安成績.
參數mode 則有以下數種組合, 只要在樹立新文件時才會失效, 另外真正建文件時的權限會遭到umask 值所影響, 是以該文件權限應當為 (mode-umaks).
- S_IRWXU00700 權限, 代表該文件一切者具有可讀、可寫及可履行的權限.
- S_IRUSR 或S_IREAD, 00400 權限, 代表該文件一切者具有可讀取的權限.
- S_IWUSR 或S_IWRITE, 00200 權限, 代表該文件一切者具有可寫入的權限.
- S_IXUSR 或S_IEXEC, 00100 權限, 代表該文件一切者具有可履行的權限.
- S_IRWXG 00070 權限, 代表該文件用戶組具有可讀、可寫及可履行的權限.
- S_IRGRP 00040 權限, 代表該文件用戶組具有可讀的權限.
- S_IWGRP 00020 權限, 代表該文件用戶組具有可寫入的權限.
- S_IXGRP 00010 權限, 代表該文件用戶組具有可履行的權限.
- S_IRWXO 00007 權限, 代表其他用戶具有可讀、可寫及可履行的權限.
- S_IROTH 00004 權限, 代表其他用戶具有可讀的權限
- S_IWOTH 00002 權限, 代表其他用戶具有可寫入的權限.
- S_IXOTH 00001 權限, 代表其他用戶具有可履行的權限.
前往值:若一切欲核對的權限都經由過程了檢討則前往0 值, 表現勝利, 只需有一個權限被制止則前往-1.
毛病代碼:
- EEXIST 參數pathname 所指的文件已存在, 卻應用了O_CREAT 和O_EXCL 旗標.
- EACCESS 參數pathname 所指的文件不相符所請求測試的權限.
- EROFS 欲測試寫入權限的文件存在於只讀文件體系內.
- EFAULT 參數pathname 指針超越可存取內存空間.
- EINVAL 參數mode 不准確.
- ENAMETOOLONG 參數 pathname 太長.
- ENOTDIR 參數pathname 不是目次.
- ENOMEM 焦點內存缺乏.
- ELOOP 參數pathname 有過量符號銜接成績.
- EIO I/O 存取毛病.
附加解釋:應用 access()感化戶認證方面的斷定要特殊當心, 例如在access()後再作open()空文件能夠會形成體系平安上的成績.
典范
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
main()
{
int fd, size;
char s[] = "Linux Programmer!\n", buffer[80];
fd = open("/tmp/temp", O_WRONLY|O_CREAT);
write(fd, s, sizeof(s));
close(fd);
fd = open("/tmp/temp", O_RDONLY);
size = read(fd, buffer, sizeof(buffer));
close(fd);
printf("%s", buffer);
}
履行
Linux Programmer!
C說話close()函數:封閉文件
頭文件:
#include <unistd.h>
界說函數:
int close(int fd);
函數解釋:當應用完文件後若已不再須要則可以使用 close()封閉該文件, 二close()會讓數據寫回磁盤, 並釋放該文件所占用的資本. 參數fd 為先前由open()或creat()所前往的文件描寫詞.
前往值:若文件順遂封閉則前往0, 產生毛病時前往-1.
毛病代碼:EBADF 參數fd 非有用的文件描寫詞或該文件已封閉.
附加解釋:固然在過程停止時, 體系會主動封閉已翻開的文件, 但仍建議自行封閉文件, 並確切檢討前往值.