小编fnc*_*ers的帖子

fork和(failed)exec后C文件指针改变

我做了制作叉子的程序,我认为孩子不影响父母.

但是文件指针已更改,但我没有对父进行任何更改.

#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失败也可以使文件指针不变?

c linux fork file

5
推荐指数
1
解决办法
455
查看次数

标签 统计

c ×1

file ×1

fork ×1

linux ×1