exec配合fork使用
实现功能,当父进程检测到输入为1的时候,创建子进程把配置文件的字段值修改掉。
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()
{
pid_t pid;
int data = 0;
while(1){
printf("please input a data\n");
scanf("%d", &data);
if(data == 1){
pid = fork();
if(pid > 0){
wait(NULL);
}
if(pid == 0){
int fdSrc;
char *readBuf = NULL;
fdSrc = open("config.txt", O_RDWR);
int size = lseek(fdSrc, 0, SEEK_END);
lseek(fdSrc, 0, SEEK_SET);
readBuf = (char *)malloc(sizeof(char) * size + 8);
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 = '8';
lseek(fdSrc, 0, SEEK_SET);
int n_write = write(fdSrc, readBuf, strlen(readBuf));
close(fdSrc);
exit(0);
}
}else{
printf("wait, do nothing\n");
}
}
return 0;
}
这样看,子进程里面的代码会变得特别复杂
下面使用 execl 来进行简化
#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()
{
pid_t pid;
int data = 0;
while(1){
printf("please input a data\n");
scanf("%d", &data);
if(data == 1){
pid = fork();
if(pid > 0){
wait(NULL);
}
if(pid == 0){
execl("./changeData", "changeData", "config.txt", NULL);
exit(0);
}
}else{
printf("wait, do nothing\n");
}
}
return 0;
}