exec族函数实例

编程思路

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;
}   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值