read()函式引數理解
阿新 • • 發佈:2019-01-30
在read()函式裡,有Linux給出的定義
NAME
read - read from a file descriptor
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
fd:檔案描述符,用來指向要操作的檔案的檔案結構體
buf:一塊記憶體空間
count:希望讀取的位元組數
返回值表示實際讀到的位元組數(字串結束符 '\0'不算)
錯誤用法:
fd=open("./test.txt",O_RWONLY)//以只讀的方式開啟檔案 test.txt
char *buf;
int n;
count=1024;
n=read(fd,buf,count) ;
這裡這種寫法是錯誤的,因為buf現在是在棧裡的一個變數,並沒有開闢真正的空間,如果此時講buf輸出,buf存放的是一個垃圾值,並沒有指向有效的記憶體的空間,
在使用陣列指標的時候要先動態的給陣列指標分配空間,
所以,上面的程式碼對於buf的改動可以有兩種形式
1./在堆中先給buf開闢空間,使buf指向一塊有效的記憶體空間
buf=malloc(count*sizeof(char));//這裡是buf指向一塊大小為count的空間
2. 重新定義,在定義的時候,就給buf開闢好記憶體空間,這裡注意,buf中實際可以存放1023個位元組,'\0'結束位佔掉一個位元組
buf char buf[1024];
再使用read()
n=read(fd,buf,count) ;
就沒有問題了