1. 程式人生 > >read()函式引數理解

read()函式引數理解

在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)  ;

就沒有問題了