天天看點

Linux系統程式設計中O_APPEND和O_TRUNC标志的使用方法。

      大家好!

      今天主要和大家聊一聊,open函數的的flags标志,譬如:O_APPEND和O_TRUNC标志的使用方法。

Linux系統程式設計中O_APPEND和O_TRUNC标志的使用方法。

目錄

​​第一:O_TRUNC标志使用方法​​

​​第二:O_APPEND使用方法​​

​第一:O_TRUNC标志使用方法

       使用該标志O_TRUNC的時候,調用open函數打開檔案的時候會将檔案原本的内容全部丢棄,檔案大小變為0;下面對檔案的操作代碼如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#icclude <stdlib.h>
int main(void)
{
 int fd;
 /* 打開檔案 */
 fd = open("./test_file", O_WRONLY | O_TRUNC);
 if (-1 == fd) {
 perror("open error");
 exit(-1);
 }
 /* 關閉檔案 */
 close(fd);
 exit(0);
}      

     在目前目錄下有一個檔案test_file,測試代碼中使用了O_TRUNC标志打開該檔案,代碼中僅僅隻是打開檔案,并沒有對其進行讀寫操作,接下來編譯運作來看看測試結果;

Linux系統程式設計中O_APPEND和O_TRUNC标志的使用方法。

第二:O_APPEND使用方法

    接下來聊一聊,使用O_APPEND标志方法,如果open函數攜帶并使用了O_APPEND标志,調用open函數打開檔案,當每次使用write()函數對檔案進行讀寫操作時,都會自動把檔案目前位置偏移量移動到檔案末尾,從檔案末尾開始寫入資料,也就是意味着每次寫入資料都是從檔案末尾開始。這裡我們直接進行測試,測試代碼如下所示:

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

int main(void)
{
   char buffer[16];
   int fd;
   int ret;
   
/* 打開檔案 */
 fd = open("./test_file", O_RDWR | O_APPEND);
 if (-1 == fd) {
 perror("open error");
 exit(-1);
 }
 /* 初始化 buffer 中的資料 */
 memset(buffer, 0x55, sizeof(buffer));
 /* 寫入資料: 寫入 4 個位元組資料 */
 ret = write(fd, buffer, 4);
 if (-1 == ret) {
 perror("write error");
 goto err;
 }
 /* 将 buffer 緩沖區中的資料全部清 0 */
 memset(buffer, 0x00, sizeof(buffer));
 /* 将位置偏移量移動到距離檔案末尾 4 個位元組處 */
 ret = lseek(fd, -4, SEEK_END);
 if (-1 == ret) {
 perror("lseek error");
 goto err;
 }
 
 //讀取資料
 ret=read(fd,buffer,4);
 if(-1==ret)
 {
    perror("read error");
    goto err;
 }
printf("0x%x 0x%x 0x%x 0x%x\n", buffer[0], buffer[1],buffer[2], buffer[3]);
    ret = 0;
err:
 /* 關閉檔案 */
 close(fd);
 exit(ret);  
}      

繼續閱讀