编程思路
1、建立一个主程序
2、由主程序创建一个子进程
3、由子进程execl运行一个可执行的程序
4、exit退出,让在父进程阻塞的wait(status)放开
5、父进程继续等待接收触发再次执行子进程条件的输入
配置文件设置
配置文件名:TEST.config
SPEED=8
LENG=3
SCORE=4
LEVEL=6
主程序代码实现
主程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
int a;
int status = 10;
while(1){
printf("please input a data:\n");
scanf("%d",&a);
if(a == 1){
pid = fork();
if(pid > 0){
wait(&status);
}
if(pid == 0){
execl("./test","./test","TEST.config",NULL);
exit(0);
}
}else{
printf("wait....! do nothing\n");
}
}
return 0;
}
功能程序代码:
程序编写思路:
1、打开文件
2、开辟缓存空间
3、把文件的内容写入缓存空间
4、把缓存空间的内容传给函数
5、先选择需要修改的配置参数选项
6、开辟一个空间(放置要修改字符串位置的前段)
7、放置要修改参数等号(=)之前的字符串
8、开辟一个空间(放置要修改字符串位置的后段)
9、放置要修改参数的下一哥配置参数的以后所有
10、开辟一个空间(放置需要修改的配置参数)
11、把前段跟更新的配置参数地址strcat相连
12、把前段相连修改参数后的地址跟后段的内容用strcat相连
13、把字符串写入到文件
执行文件名:test
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
void gai(char *Buf)
{
char *speed = "SPEED=";
char *leng = "LENG=";
char *score = "SCORE=";
char *level = "LEVEL=";
int num;
printf("Please input the parameter to modify:\n");
printf("1、SPEED\n2、LENG\n3、SCORE\n4、LEVEL\n");
scanf("%d",&num);
char *a = (char *)malloc(sizeof(char)*10);
memset(a, 0, sizeof(a));
switch(num){
case 1:
strcpy(a, speed);
break;
case 2:
strcpy(a, leng);
break;
case 3:
strcpy(a, score);
break;
case 4:
strcpy(a, level);
break;
}
char *p = strstr(Buf, a);
if(p == NULL){
printf("not found");
exit(-1);
}
p = p + strlen(a);
int size = strlen(Buf) - strlen(p);
char *front = (char *)malloc(sizeof(char)*size+3);
memset(front, 0, sizeof(front));
strncpy(front, Buf, size);
char *later = NULL;
char *tmp = NULL;
if(strcmp(a, speed) == 0){
tmp = strstr(p,leng);
later = (char *)malloc(sizeof(char)*strlen(p)+3);
memset(later, 0, sizeof(later));
strcpy(later,tmp);
}
else if(strcmp(a, leng) == 0){
tmp = strstr(p, score);
later = (char *)malloc(sizeof(char)*strlen(p)+3);
memset(later, 0, sizeof(later));
strcpy(later,tmp);
}
else if(strcmp(a, score) == 0){
tmp = strstr(p, level);
later = (char *)malloc(sizeof(char)*strlen(p)+3);
memset(later, 0, sizeof(later));
strcpy(later,tmp);
}
char *n_input = (char *)malloc(sizeof(char)*6);
memset(n_input,0,sizeof(n_input));
printf("Please input %s it parameter:\n",a);
scanf("%s",n_input);
strcat(front,n_input);
strcat(front,"\n");
if(strcmp(a,level) != 0){
strcat(front,later);
}
memset(Buf, 0, sizeof(Buf));
strcpy(Buf,front);
}
int main(int argc, char **argv)
{
if(argc != 2){
printf("pararm error\n");
exit(-1);
}
int fdSrc;
fdSrc = open(argv[1],O_RDWR|O_APPEND);
int size = lseek(fdSrc, 0, SEEK_END);
lseek(fdSrc, 0, SEEK_SET);
char *readBuf = NULL;
readBuf = (char *)malloc(sizeof(char)*size + 3);
memset(readBuf, 0, sizeof(readBuf));
int n_read = read(fdSrc, readBuf, size);
close(fdSrc);
// printf("%s",readBuf);
gai(readBuf);
printf("%s",readBuf);
fdSrc = open(argv[1],O_RDWR|O_TRUNC);
int n_write = write(fdSrc, readBuf, strlen(readBuf));
close(fdSrc);
free(readBuf);
readBuf = NULL;
return 0;
}