函式名
函式名: read
功 能: 從檔案中讀
用 法: int read(int handle, void *buf, int nbyte);
程式例:
#include
#include
#include
#include
#include
#include
int main(void)
{
void *buf;
int handle, bytes;
buf = malloc(10);
/*
Looks for a file in the current directory named TEST.$$$ and attempts
to read 10 bytes from it. To
*/
if ((bytes = read(handle, buf, 10)) == -1) {
printf("Read Failed.\n");
exit(1);
}
else {
printf("Read: %d bytes read.\n", bytes);
}
return 0;
函式
函式聲明:istream& read( char *buffer, streamsize number );
參數說明:
buffer:指向緩衝區的字元指針
number:要讀多少個位元組,不能大於buffer指向的緩衝區
函式讀到檔案尾或讀夠number個符,函式終止。
示例:
/*********************************************
*讀取windows系統下的win.ini檔案,並顯示*
**********************************************/
#include <iostream>
#include <fstream>//read函式所有的頭檔案
#include <Windows.h>
#include <string>
int main()
{
char buffer[100];
char winFilePath[MAX_PATH];
GetWindowsDirectoryA(winFilePath,MAX_PATH);
strcat(winFilePath,win_ini檔案名稱); //得到win.ini檔案絕對路徑
std::ifstream win_ini(winFilePath,std::ios::in|std::ios::binary);//構造時關聯檔案
if(!win_ini 。is_open())
{
std::clog<<"打開檔案失敗"<<std::endl;
exit(0);
}
while(!win_ini.eof())
{
win_ini.read(buffer,99);
buffer[win_ini.gcount()]="\0";//read函式不會在讀入的位元組中加入
std::cout<<buffer;
}
std::cout<<std::endl;
win_ini.close();
return 1;
}
LinuxC函式
read(由已打開的檔案讀取數據)
相關函式
readdir,write,fcntl,close,lseek,readlink,fread
表頭檔案
#include<unistd.h>
定義函式
ssize_t read(int fd,void * buf ,size_t count);
函式說明
read()會把參數fd 所指的檔案傳送count個位元組到buf指針所指的記憶體中。若參數count為0,則read為實際讀取到的位元組數,如果返回0,表示已到達檔案尾或是無可讀取的數據,此外檔案讀寫位置會隨讀取到的位元組移動。
附加說明
如果順利read()會返回實際讀到的位元組數,最好能將返回值與參數count 作比較,若返回的位元組數比要求讀取的位元組數少,則有可能讀到了檔案尾、從管道(pipe)或終端機讀取,或者是read()被信號中斷了讀取動作。當有錯誤發生時則返回-1,錯誤代碼存入errno中,而檔案讀寫位置則無法預期。
錯誤代碼
EINTR 此調用被信號所中斷。
EAGAIN 當使用不可阻斷I/O 時(O_NONBLOCK == 非阻塞),若無數據可讀取則返回此值。
EBADF 參數fd 非有效的檔案描述詞,或該檔案已關閉。