首先普通的fork()和文件修改的配合使用
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char**argv){
char* terdata=NULL;
int a;
a=open(argv[1],O_RDWR);
if(a==-1){
printf("open fail\n");
a=open("./pppttt",O_RDWR|O_CREAT,0060);
}
if(a==-1){
printf("error 1\n");
exit(-1);
}
int size=lseek(a,0,SEEK_END);
lseek(a,0,SEEK_SET);
terdata=(char*)malloc(sizeof(char)*size+21);
int n_read=read(a,terdata,size);
char*p=strstr(terdata,"speed=");
if(p==NULL){
printf("error 2\n");
exit(-1);
}
p=p+strlen("speed=");
*p='4';
lseek(a,0,SEEK_SET);
int n_write=write(a,terdata,strlen(terdata));
close(a);
return 0;
运行:./a.out ttt
打开 vi ttt文件 文字已修改 (argv【1】)
或者
把代码当中的main(x,xx) 修改为 main(),
argv[1] ,改为配置文件名
直接运行为:./a.out
改用 execl("./gdata","gdata","nb",NULL);调用该文件里程序的路径,程序,参数(配置文件)实现更方便
int main(){
int data;
pid_t pyd;
while(1){
printf("please input data:\n");
scanf("%d",&data);
if(data==100){
pyd=fork();
if(pyd>0){
wait(NULL);
}
if(pyd==0){
execl("./gdata","gdata","nb",NULL); }
}
else{
printf("input error!\n");
}
}
return 0;
}
运行:
gcc demo10.c
CLC@Embed_Learn:~/proceed$ vi nb
CLC@Embed_Learn:~/proceed$ ./a.out