1. 程式人生 > 其它 >Linux下的檔案讀寫操作

Linux下的檔案讀寫操作

技術標籤:linux

首先要包含以下標頭檔案

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>//以上檔案操作需要標頭檔案
#include<stdio.h>
#include<string.h>//strlen
#include<stdlib.h>//malloc

對於檔案讀寫我們用read和write函式,與c中create函式類似,具體函式描述以及呼叫引數請自行參考百度
接下來是所有的程式碼

#include
<sys/types.h>
#include<sys/stat.h> #include<fcntl.h> #include<stdio.h> #include<unistd.h> #include<string.h> #include<stdlib.h> int main() { int fd; char *buf ="made by ck"; fd=open("./file1",O_RDWR); if(fd ==-1) { printf("open file failed\n"
); fd=open("./file1",O_RDWR|O_CREAT,0600); if(fd>0) { printf("create file1 sucess\n"); } } printf("open sucess: fd=%d\n",fd); int n_write =write(fd,buf,strlen(buf)); //這裡注意不要用sizeof(buf),這樣只會顯示指標長度的字元數,例如在linux下指標長度為8位元組,則檔案中只輸入了8個位元組的字元。 if
(n_write !=-1) { printf("write %d byte to file\n",n_write); } char *readBuf; readBuf=(char*)malloc(sizeof(char)*n_write +1); int n_read =read(fd,readBuf,n_write); printf("read %d ,inside: %s\n",n_read,readBuf); close(fd); return 0; }

然後會發現什麼都讀不到

在這裡插入圖片描述

原因是我們寫完後 游標定位在字元最後,讀取的時候是讀取游標後面的東西,所以解決這個問題有兩種方法
1.重新開啟檔案
2.重新定位游標

先來第一種,我們在寫入完後,讀取之前,進行關閉開啟操作。
程式碼如下

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>



int main()
{
 int fd;
 char *buf ="made by ck";
 fd=open("./file1",O_RDWR);

 if(fd ==-1)
 {
  printf("open file failed\n");
  fd=open("./file1",O_RDWR|O_CREAT,0600);
  if(fd>0)
       {
        printf("create file1 sucess\n");
       }

 }

 printf("open sucess: fd=%d\n",fd);

 int n_write =write(fd,buf,strlen(buf));//don't use sizeof()
 if(n_write !=-1)
   {
     printf("write %d byte to file\n",n_write);
   }

close(fd);
fd=open("./file1",O_RDWR);
//重新關閉以及開啟

char *readBuf;

readBuf=(char*)malloc(sizeof(char)*n_write +1);

int n_read =read(fd,readBuf,n_write);

printf("read %d ,inside: %s\n",n_read,readBuf);

close(fd);

return 0;

}



然後我們會看到正確的執行結果
在這裡插入圖片描述

接下來就是第二種方法
移動游標,我們知道
lseek這個函式的描述如下,包含三個引數w
of_t lseek(int fd,off_t offset,int whence)
我來進行簡單翻譯一下這三個引數,第一個是檔案,第二個是偏移量,第三個是相對位置(檔案頭,檔案當前位置,檔案尾)

在我們寫完程式碼後,我們處於檔案尾,我們可以相對檔案尾偏移(負)字元大小,也可以相對檔案頭偏移0,
頭:SEEK_SET
尾:SEEK_END
當前位置:SEEK_CUR
就是在上述重新開啟檔案的相同位置更改為如下程式碼

lseek(fd,0,SEEK_SET);

執行結果如下
在這裡插入圖片描述

以上就是關於Linux下的簡單檔案讀寫操作,尚有不足之處,請大神指正

salute CLC