EOF在文件结束前到达

EOF在文件结束前到达,第1张

概述我正在为学校制作一个程序,我有一个多进程程序,每个进程读取一个文件的一部分,它们一起工作来计算文件中的单词数.我有一个问题,如果有超过2个进程,那么所有进程在读取文件的部分之前从文件中读取EOF.这是相关的代码:#include <stdio.h> #include <stdlib.h> #include <unistd.h&g

我正在为学校制作一个程序,我有一个多进程程序,每个进程读取一个文件的一部分,它们一起工作来计算文件中的单词数.我有一个问题,如果有超过2个进程,那么所有进程在读取文件的部分之前从文件中读取EOF.这是相关的代码:

#include 

使用3个进程运行文件时的输出:

All files opened successfullyProcess 2 found unexpected EOF at 1323008.Process 1 found unexpected EOF at 823849.Process 0 found unexpected EOF at 331776.

导致错误的测试文件:https://dl.dropboxusercontent.com/u/16835571/test34.txt

编译:

gcc main.c -o wordc-mp

并运行:

wordc-mp test34.txt 3

值得注意的是,只有那个特定的文件给我带来了问题,但错误的偏移量不断变化,因此它不是文件的内容.最佳答案您在分叉之前已经创建了文件描述符.子进程继承文件描述符,该文件描述符指向父对象的相同文件描述,因此,与其中一个子进程一起使光标前进给所有子进程.

从“man fork”,你可以得到确认:

The child process is created with a single thread—the one
that
called fork(). The entire virtual address space of the parent is
replicated in the child,including the states of mutexes,condition
variables,and other pthreads objects; the use of pthread_atfork(3)
may be helpful for dealing with problems that this can cause.

The child inherits copIEs of the parent’s set of open file descrip‐
tors. Each file descriptor in the child refers to the same open
file description (see open(2)) as the corresponding file descriptor
in the parent. This means that the two descriptors share open file
status flags,current file offset,and signal-driven I/O attributes
(see the description of F_SetoWN and F_SETSIG in fcntl(2)).

总结

以上是内存溢出为你收集整理的EOF在文件结束到达全部内容,希望文章能够帮你解决EOF在文件结束前到达所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1046343.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)