C語言實現文字操作

2020-08-08 20:35:32

C語言實現文字操作

程式碼

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


int main(int argc, char **argv)
{
        const char *pathname = "./test.conf";
        int fd = open(pathname, O_RDWR, S_IRWXU);
        if(fd == -1){
                perror("file open fail:");
                exit(-1);
        }else{
                // get size of file
                int file_size = lseek(fd, 0, SEEK_END);

                lseek(fd, 0, SEEK_SET);

                // creat size
				char *buf = (char *)malloc(file_size*2);
                memset(buf, '\0', file_size*2);

                // read conf
                int ret_read = read(fd, buf, file_size);

                // find the context in conf file
                // char *strstr(const char *haystack, const char *needle);
                char *p = strstr(buf, "length=");
                if(p == NULL){
                        printf("cant find this context!\n");
                }else{
                        p = p+strlen("length=");
                        *p= '5';
                        p++;
                        while(*p != '\n'){
                                *p = ' ';
                                p++;
                        }
                        
				// ssize_t write(int fd, const void *buf, size_t count);
                // count size
                int count = strlen(buf);

                // put the pointer to the start
                lseek(fd, 0, SEEK_SET);
                int write_byte = write(fd, buf, count);
                if (write_byte == -1){
                        perror("write failed:");
                        exit(-1);
                }else{
                        printf("write success!\n");
                }
        }

        close(fd);

        return 0;
}

組態檔

[CLIENT]
language=en
length=10
pwd=112343

學習使用c語言來操作文件,相對於python來說,操作步驟複雜了一些。特別對於字串指針,如果是列印當前指針地址往後的所有內容,列印p就可以了,取單一一個char的內容,就需要取*p裏面的內容取判斷。

一開始的時候,對於修改的操作,我想改length=10 -> length=5,需要把當前行5後面的所有清空。學習memset的時候,清除記憶體空間的值是’\0’,所以想把*p = '\0';但是這樣失敗了,然後我就嘗試用空格符來替換了。

剛開始學c語言,如果有更好的方法,可以留言給我呀,大家共同進步。