我做了制作叉子的程序,我认为孩子不影响父母.
但是文件指针已更改,但我没有对父进行任何更改.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(void) {
FILE *fp = fopen("sm.c", "r");
char buf[1000];
char *args[] = {"invailid_command", NULL};
fgets(buf, sizeof(buf), fp);
printf("I'm one %d %ld\n", getpid(), ftell(fp));
if (fork() == 0) {
execvp(args[0], args);
exit(EXIT_FAILURE);
}
wait(NULL);
printf("I'm two %d %ld\n", getpid(), ftell(fp));
}
Run Code Online (Sandbox Code Playgroud)
这输出
I'm one 21500 20
I'm two 21500 -1
Run Code Online (Sandbox Code Playgroud)
我想让两个printf调用之间的文件指针不变.
为什么文件指针会改变,即使execvp失败也可以使文件指针不变?