#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語言,如果有更好的方法,可以留言給我呀,大家共同進步。