exec函数配合fork使用进行修改配置文件

需要三个文件
1.config.txt
2.changeData.c
3.demo.c
config.txt:

a=10
b=1
LENG=5

changeData.c

#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 argc, char **argv){
    
     //传入一个文件
        int fdSrc;

        printf("changeing");
        char *readBuf = NULL;
        fdSrc = open(argv[1],O_RDWR);
        int size = lseek(fdSrc,0,SEEK_END);
        lseek(fdSrc,0,SEEK_SET);
        readBuf = (char *)malloc(sizeof(char)*size+8);
        read(fdSrc,readBuf,size);

        char *p = strstr(readBuf,"LENG=");//查找"LENG="进行修改
        p = p + strlen("LENG=");//指针移动到要修改的位置
		//注意一定要''而不是""不然会出现错误
        *p = '5';    //修改内容
        lseek(fdSrc,0,SEEK_SET);//移动光标到头
		//重新写入
        int n_write = write(fdSrc,readBuf,strlen(readBuf));
        printf("change done!");
	close(fdSrc);

        return 0;
}

编译changeData

gcc changeData.c -o changeData

demo.c

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

int main(){
    
    
	pid_t pid;
	int a;
	while(1){
    
    
	printf("input date\n");
	scanf("%d",&a);
		if(a == 1){
    
    
				pid = fork();
				if(pid > 0){
    
    
					wait(NULL);
				}
				if(pid == 0){
    
    
					printf("change.....\n");
					execl("./changeData","changeData","config.txt",NULL);
		
					printf("change \n");
	
				}
		}else{
    
    
			printf("nothing\n");
		}
	}
}

编译demo.c

gcc demo.c

输入1时修改配置文件

猜你喜欢

转载自blog.csdn.net/weixin_41679960/article/details/114954940