c-fseek-ftell读取相同的输入



我正试图让我的程序每次为每个孩子读取一行(每行包含一个int)。每次我读这个时,它都会一直读第一行。

这是我的代码的基础。

void forkChildren (int nChildren) {
int i;
int size;
int sum = 0;
int tell = 0;
pid_t pid;
for (i = 0; i < nChildren; i++) {
    pid = fork();
    if (pid == -1) {
        /* error handling here, if needed */
        return;
    }
    if (pid == 0) {
        char data[10];
        FILE * file1;
        file1 = fopen("numbers.dat", "r");
        fseek(file1, tell, SEEK_SET);
        fgets(data, 10, file1);
        //fseek(file1, tell, SEEK_SET);
        tell += strlen(data); 
        printf("%d ", tell);
        sum = atoi(data);
        printf("Sum is: %d n", sum);
        sleep (5);
        return;
    }

分叉后,每个子级都有自己的PCB。由于您在叉之后打开文件,因此每个子级都有自己单独的文件描述符、偏移量等。
如果您希望子进程共享相同的文件描述符和偏移量,它们必须指向内核创建的相同文件描述符。为此,您必须在
分叉之前打开文件
请阅读此处了解更多信息。

子项继承父项的打开文件描述符集的副本。。。

在您的代码中,您试图通过使用int tell来跟踪文件中的位置,但该变量在子进程之间是而不是共享的。相反,使用共享文件描述符,内核将为您跟踪偏移量。

相关内容

  • 没有找到相关文章

最新更新