c語言read函數可以打開文件嗎,c語言 read

本文目錄一覽:

C語言read函數

read內部是調_read, _read的返回值在msdn中有這樣的描述

_read returns the number of bytes read, which might be less than count if there are fewer than count bytes left in the file or if the file was opened in text mode, in which case each carriage return–line feed (CR-LF) pair is replaced with a single linefeed character. Only the single linefeed character is counted in the return value. The replacement does not affect the file pointer.

注意這一段: in which case each carriage return–line feed (CR-LF) pair is replaced with a single linefeed character

就是說如果用text模式打開的話, 文件換行時可能在文本中有2個字元—-換行和縮進(CR-LF), 而在return的時候系統是把它作為1個回車符號(‘\n’)所返回的. 所以會導致這個情況

c 語言中打開文件的函數名為

C語言open()函數:打開文件函數

相關函數:read, write, fcntl, close, link,stat, umask, unlink, fopen

頭文件:#include sys/types.h #includesys/stat.h #include fcntl.h

定義函數:

intopen(const char * pathname, int flags);

intopen(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_IRWXG00070 許可權, 代表該文件用戶組具有可讀、可寫及可執行的許可權.

S_IRGRP00040 許可權, 代表該文件用戶組具有可讀的許可權.

S_IWGRP00020 許可權, 代表該文件用戶組具有可寫入的許可權.

S_IXGRP00010 許可權, 代表該文件用戶組具有可執行的許可權.

S_IRWXO00007 許可權, 代表其他用戶具有可讀、可寫及可執行的許可權.

S_IROTH00004 許可權, 代表其他用戶具有可讀的許可權

S_IWOTH00002 許可權, 代表其他用戶具有可寫入的許可權.

S_IXOTH00001 許可權, 代表其他用戶具有可執行的許可權.

返回值:若所有欲核查的許可權都通過了檢查則返回0 值, 表示成功, 只要有一個許可權被禁止則返回-1.

錯誤代碼:

EEXIST參數pathname 所指的文件已存在, 卻使用了O_CREAT 和O_EXCL旗標.

EACCESS參數pathname 所指的文件不符合所要求測試的許可權.

EROFS 欲測試寫入許可權的文件存在於只讀文件系統內.

EFAULT參數pathname 指針超出可存取內存空間.

EINVAL參數mode 不正確.

ENAMETOOLONG參數 pathname 太長.

ENOTDIR參數pathname 不是目錄.

ENOMEM核心內存不足.

ELOOP 參數pathname 有過多符號連接問題.

EIOI/O 存取錯誤.

附加說明:使用access()作用戶認證方面的判斷要特別小心, 例如在access()後再作open()空文件可能會造成系統安全上的問題.

範例

#includeunistd.h

#includesys/types.h

#includesys/stat.h

#includefcntl.h

main()

{

intfd, size;

chars[] = “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);

}

執行

LinuxProgrammer!

C中read()的用法?

read()函數的原型是int read(int fd,void *buf,int count);。它的功能是「從文件說明符fd相關聯的文件中讀取count個字元,並把這些字元存儲到buf所指的緩衝區中。返回值是操作成功時所讀到的位元組數,在文件結束時可能少於count個位元組;若返回值為-1則說明出錯了,返回0則表示到達文件尾端。例:從文件ABC.txt中讀取前100個位元組存入數組buffer中——

#include “stdin.h”

#include “io.h”

#include “fcnt1.h”

int main(void){

int fd;

char buffer[100];

if((fd=open(“ABC.txt”,O_RDONLY))==-1){

printf(“Can’t open file.\n”);

exit(-1);

}

if(read(fd,buffer,100)!=100)

printf(“Possible read error!\n”);

}

原創文章,作者:JTKIM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/325332.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JTKIM的頭像JTKIM
上一篇 2025-01-13 13:23
下一篇 2025-01-13 13:24

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字元串操作中,capitalize函數常常被用到,這個函數可以使字元串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常問題的解決

    本文旨在解決vue下載無後綴名的文件被加上後綴.txt,有後綴名的文件下載正常的問題,提供完整的代碼示例供參考。 一、分析問題 首先,需了解vue中下載文件的情況。一般情況下,我們…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 單片機列印函數

    單片機列印是指通過串口或並口將一些數據列印到終端設備上。在單片機應用中,列印非常重要。正確的列印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的列印數據可以幫助我們快速…

    編程 2025-04-29
  • 為什麼用cmd運行Java時需要在文件內打開cmd為中心

    在Java開發中,我們經常會使用cmd在命令行窗口運行程序。然而,有時候我們會發現,在運行Java程序時,需要在文件內打開cmd為中心,這讓很多開發者感到疑惑,那麼,為什麼會出現這…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29

發表回復

登錄後才能評論