我试图从文件中读取行,当我在Batch_MODE函数中直接使用getline时,它工作得很好,但当我在一个单独的函数中重构代码时,它给了我一个错误.
int main(int argc, char *argv[]) {
if (argc > 2)
return EXIT_FAILURE;
batch_mode(argv[1]);
return EXIT_SUCCESS;
}
Batch_MODE函数
void batch_mode(char *path) {
char *line = NULL;
ssize_t error = 0;
char *cmd = NULL;
FILE *file = fopen(path, "r");
if (file == NULL) {
printf("Coudn't read file\n");
return;
}
while (error != -1) {
read_line(line, file, cmd);
error = -1;
int thread = fork();
if (thread == 0) {
char *myargs[] = {NULL};
execv(cmd, myargs);
} else {
thread = wait(NULL);
}
}
if (file != NULL)
fclose(file);
free(line);
}
lines are read correctly in this function when printf but output null in the Batch_MODE函数
ssize_t read_line(char *line, FILE *file, char *cmd) {
size_t len = 0;
ssize_t read = 0;
read = getline(&line, &len, file);
printf("%s\n", line);
if (read == -1) {
printf("Coudn't read line\n");
return -1;
}
char *copy = line;
cmd = strsep(©, " ");
printf("%s\n", cmd);
return 0;
}
当try 此代码时,它输出无法读取文件,因为它正在多次执行
void batch_mode(char *path) {
char *line = NULL;
ssize_t error = 0;
char *cmd = NULL;
FILE *file = fopen(path, "r");
if (file == NULL) {
printf("Coudn't read file\n");
return;
}
while ((error = read_line(line, file, cmd)) != -1) {
int thread = fork();
if (thread == 0) {
char *myargs[] = {NULL};
execv(cmd, myargs);
} else {
thread = wait(NULL);
}
}
if (file != NULL)
fclose(file);
free(line);
}