程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 應用C說話操作文件的根本函數整頓

應用C說話操作文件的根本函數整頓

編輯:關於C++

應用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 非有用的文件描寫詞或該文件已封閉.

附加解釋:固然在過程停止時, 體系會主動封閉已翻開的文件, 但仍建議自行封閉文件, 並確切檢討前往值.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved