c - 我需要在这里更新文件描述符吗?

标签 c linux file-descriptor

正在从服务器向客户端传输一个大小为 2gb 的文件。在客户端,收到该文件的 512mb 后,我打开它:

FILE *fp= fopen("that file","r"); 

现在下载完成后,我可以使用该文件描述符访问该文件的全部 2gb 数据吗?还是我需要重新打开它才能访问整个文件?

最佳答案

首先,您应该避免在 Linux 文件名中使用空格。所以你的例子应该是 FILE *fp= fopen("that_file","r"); 在文件名中有空格(或者甚至像换行符这样的控制字符)是不好的品味。

在 Linux 下,文件描述符(不是 FILE* 句柄!)是一个小整数,由内核处理:在内核中,进程有一个打开文件表,它们的应用程序代码通过它们的文件描述符引用(使用像openread 等系统调用)这些文件。标准 C 库管理缓冲和文件描述符(因此在 FILE 数据结构中有缓冲区和文件描述符)。

因此,如果您有一个进程读取一个文件,而另一个进程同时写入文件(这是一种不好的做法),则读取进程能够读取所有可用字节。

所以你不需要“更新”你的fp但是你的代码很糟糕(因为读写过程之间缺乏同步)。

关于c - 我需要在这里更新文件描述符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7980242/

相关文章:

c - 为什么文件描述符 1 和 2 可以在手动输入时读取,但在输入重定向时却不能读取?

c - 如何将一个值从 c 程序返回到调用它的后台脚本?

c - 使用 malloc 和 realloc 进行动态存储的最佳方式

linux - 如何在 Linux 中查找目录创建的详细信息

linux - 使用 rsync 设置所有文件和文件夹的组

linux - 什么信号(SIGCHLD,SIG_DFL);意思?

c - unlinkat() C 中的目录

c - struct 中的 int 字段尚未初始化的值是什么?

c - 使用带可变参数的函数打印字符串 (va_list)

linux - 检查 Linux 中给定进程的开放 FD 限制