这是一个设置环境变量的外部函数'
int mini_read(char ** variables){
if(variables[1] == NULL){
fprintf(stderr, "error\n");
return 1;
}
char buf[100];
fgets(buf, 100, stdin);
//I doubt the bug is below here
buf[strcspn(buf, "\n")] = 0;
char ** valores = NULL;
char * valor = strtok(buf, " \t");
valores[0] = valor;
int i = 1;
// Guardar valores en array
while(valor != NULL){
valor = strtok(NULL, " \t");
valores[i] = valor;
i++;
}
for(int i = 1; ; i++){
if(valores[i-1] == NULL) break;
//printf("variables[%d]: %s\n valor[%d]: %c\n", i, variables[i], i, valor[i]);
if(variables[i] == NULL){
char*fin = NULL;
//Si hay más valores que variables, concatenar valores
for(int j = i-1; valores[j] != NULL; j++){
printf("%s\n", fin);
strcat(fin, valores[j]);
}
printf("%s\n", fin);
setenv(variables[i-1], fin, 1);
break;
}
setenv(variables[i], valores[i-1], 1);
}
return 0;
'
然后我想在父进程中调用这个函数,因为如果我从子进程调用它,环境变量不会被“全局”设置,如果我从子进程调用它,它工作得很好,但是如果我从父进程调用它,fgets
()不等待输入。
int main(void){
pid = fork();
if(pid == 0){
//Option 1
if(strcmp(argv[0], "read") == 0) mini_read(argv);
}
else{
//Option 2
if(strcmp(argv[0], "read") == 0) mini_read(argv);
waitpid(pid, &wstatus, 0);
}
}`
有人知道吗?谢谢
1条答案
按热度按时间xtfmy6hx1#
您需要为
valores
保留空间,类似于:由于您已经标记了Linux问题,因此可以考虑使用strsep而不是
strtok