歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux 0.11中對文本文件進行修改的策略

現在,假設 hello.txt 是硬盤上已有的一個文件,而且內容為 “hello, world” ,在文件的當前指針設置完畢後,我們來介紹 sys_read , sys_write , sys_lseek 如何聯合使用才能把數據插入到 hello.txt 中。

可以通過如下方式對它們進行組合應用,應用程序的代碼如下:

#include <fcntl.h>  
#include <stdio.h>  
#include <string.h>  
      
#define LOCATION 6  
      
int main(char argc, char **argv)  
{  
    char str1[] = "Linux";  
    char str2[1024];  
    int fd, size;  
          
    memset(str2, 0, sizeof(str2));  
    fd = open("hello.txt", O_RDWR, 0644);  
    lseek(fd, LOCATION, SEEK_SET);  
    strcpy(str2, str1);  
    size = read(fd, str2+5, 6);  
          
    lseek(fd, LOCATION, SEEK_SET);  
    size = write(fd, str2, strlen(str2));  
          
    close(fd);  
    return (0);  
}

本文URL地址:http://www.bianceng.cn/OS/Linux/201410/45411.htm

這是一段用戶進程的程序,通過這樣一段代碼就能將 “Linux” 這個字符串插入到 hello.txt 文件中了,最終 hello.txt 文件中的內容應該是 : “hello,Linuxworld” 。

這段代碼幾乎用到了操作文本文件的所有系統調用,下下面我們來分析一下這些代碼的作用。

fd = open("hello.txt", O_RDWR, 0644);  

open 函數將對應sys_open 函數,很明顯,在操作之前先要確定要操作哪個文件。

lseek(fd, LOCATION, SEEK_SET);  

lseek 函數將對應 sys_lseek 函數,由於參數中選擇了 SEEK_SET ,表明要將文件的當前操作指針從文件的起始位置向文件尾端偏移6個字節。

strcpy(str2, str1);  

這一行是將 “Linux” 這個字符串拷貝到 str2[1024] 這個數組的起始位置處。

size = read(fd, str2+5, 6);  

這一行實現的拼接,拼接的結果是: Linuxworld

lseek(fd, LOCATION, SEEK_SET);  

這行的效果和前面調用的效果一樣,都是要講文件的當前操作指針,即文件的起始位置,向文件尾端偏移6個字節,這個時候就確定了下面文件的准確寫入位置。

size = write(fd, str2, strlen(str2));  

write 函數將對應 sys_write 函數,現在要講 str2 這個數組中的 “Linuxworld” 字符串寫入到 hello.txt 文件中,而且寫入位置剛剛確定,就是從文件的起始位置向尾端偏移六個字節的位置,於是最終的寫入結果就是 : “hello,Linuxworld”

以上所述,就是 read, write, lseek 組合應用,從而實現文件修改的全過程。

Copyright © Linux教程網 All Rights Reserved