我有一个多线程的应用程序正在打开和读取同一个文件(而不是写入)。我打开每个线程的不同文件描述符(但它们都指向相同的文件)。每个线程然后读取该文件并可能关闭它并在达到EOF时再次打开它。这个可以吗?如果我在文件描述符上执行fclose(),是否会影响指向同一文件的其他文件描述符?对同一个文件的多个文件描述符,C
6
A
回答
3
没关系。您可以打开所有需要相同文件的时间,并且每个文件描述符将相互独立。
0
这应该很好,只要每个线程都有自己的文件句柄。由于您提到使用fclose()
,这表明您在每个线程中也使用fopen()
,并且每个线程仅影响其自己的FILE *
变量。
有问题吗?
3
对于Linux系统,您不需要多个文件描述符来执行此操作。您可以共享一个文件描述符,并使用pread以原子方式执行查找/读取操作,而无需修改文件描述符。
+0
'pread'是POSIX,所以它不仅限于Linux。 – 2017-04-26 16:28:29
相关问题
- 1. 对同一文件的两个文件描述符
- 2. c strcpy文件描述符
- 3. C中调用一个二进制文件(同时共享文件描述符)
- 4. 如何将多个文件描述符合并为一个?
- 5. 管叉:跨多个孩子共用一个文件描述符
- 6. N:1个文件描述符?
- 7. 错误的文件描述符C
- 8. 如何从单个文件描述符分配多个MMAP?
- 9. 在C中打开文件描述符
- 10. 在C++中欺骗文件描述符
- 11. C++文件描述符(套接字)isopen()?
- 12. C:在多个线程中使用不同文件描述符在不同位置打开文件
- 13. 文件描述符和打开文件
- 14. webservice描述符文件
- 15. 关闭文件描述符
- 16. 创建文件描述符
- 17. Linux open()文件描述符
- 18. 写作文件描述符
- 19. 实现文件描述符
- 20. 文件描述符轮询
- 21. 总共有多少个读或写文件描述符?
- 22. 什么是关闭一个无效的文件描述符呢?
- 23. 重定向到一个奇怪的文件描述符否
- 24. 文件描述符和文件句柄(和C)
- 25. 创建GNU C文件描述符没有文件句柄
- 26. SOCKET文件描述
- 27. 关闭了一个名为文件描述符
- 28. 套接字描述符与文件描述符
- 29. 多次使用socketpair函数的文件描述符时出现“错误文件描述符”错误
- 30. popen后重复的文件描述符
基本上,我创建了一个2-dim文件指针数组(因为每个线程都会读取x文件),总共有y个线程。所以我的FILE *数组是数组[y] [x]。对于给定的线程i,我通过fopen(array [i] [0])打开一个文件(例如文件0)。然后,我读取(fread)文件(并非全部一次)并执行其他任务(尽管如此,不会发生文件写入)。在阅读过程中,如果达到EOF,我会确认并再次打开。我担心的是,当我打开和打开时,是否可以以任何方式影响来自其他线程的指向我执行的同一文件的其他FILE *指针f关闭 – Gigi 2010-04-18 21:19:37
假设您的fopen()是拼写错误(它应该是'array [i] [0] = fopen' ...),那么是的,这将工作正常。如果每个线程不处理属于其他线程的数据。 – wallyk 2010-04-18 22:07:04
谢谢。是的,所有线程都对这个文件做了fopen(),fread()和fclose()。 – Gigi 2010-04-18 22:56:42