Linux下实现在exec配合fork在一定条件下修改配置文件原理

本文详细介绍了如何在Linux环境下,通过exec程序的子进程调用changeData来修改配置文件a.config中的特定值。changeData程序利用strstr()函数定位目标字符串,并通过lseek()和write()函数实现内容修改。当在exec程序中输入1时,会创建子进程执行changeData,将LENG=8更改为LENG=5。这一过程展示了Linux进程间的交互和文件操作技巧。
摘要由CSDN通过智能技术生成

***简述:***在exec程序的进程中创建子进程调用changeData程序来进行修改a.config这个配置文件中的LENG。

首先我们先来看看changeData的代码

#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;
 char *readBuf=NULL;

  if(argc!=2)
  {
    printf("pararm error\n");
    exit(-1);
  }

 fdSrc=open(argv[1],O_RDWR);

 int size=lseek(fdSrc,0,SEEK_END);
 lseek(fdSrc,0,SEEK_SET);

readBuf=(char*)malloc(sizeof(char)*size+32);


 int n_read=read(fdSrc,readBuf,size);

 char *p=strstr(readBuf,"LENG=");

 if(p==NULL)
 {
  printf("not found\n");
  exit(-1);
 }

 p=p+strlen("LENG=");
 *p='5';
 lseek(fdSrc,0,SEEK_SET);
 int n_write=write(fdSrc,readBuf,strlen(readBuf));
 printf("change sucess!\n");
close(fdSrc);

return 0;

}


原理就是先用strstr()函数找到SPEED这个字符串,然后指针位移,修改目标字符,要注意调用write前要用lseek(fdSrc,0,SEEK_SET);
重新定位光标。

然后我们来看exec这个程序

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

int main()
{
        pid_t pid;
        int data =10;

        while(1){
                 printf("please input a data\n");
                 scanf("%d",&data);
                 if(data == 1){

                                pid= fork();

                                 if(pid ==0 ){
                                 execl("./changeData","changeData","a.config",NULL);

                                 exit(0);

                                 }

                              }
                  else{
                       printf("do nothing\n");
                  }
                }

return 0;
}

当我们输入1时,创建子进程,调用execl函数来执行changeData,我们来看看执行前后的结果。

在这里插入图片描述
当我们输入5,6等不满足条件的字符,不执行changeData,输入1,可以看到a.config中的LENG=8变成了LENG=5。

以上就是关于Linux下实现在exec配合fork在一定条件下修改配置文件原理,尚有不足之处,请各位大师指正。

salute CLC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值