C语言 我是否需要更新这里的文件描述符



一个2gb大小的文件正在从服务器传输到客户端。在客户端,接收到512mb的文件后,我用以下命令打开它:

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

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

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

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

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

所以你不需要"更新"你的fp,但你的代码是蹩脚的(因为在读取&写作过程)。

不需要重新打开文件;如果您定期在客户机中请求文件的大小,您将看到它在增长。请注意,在写入过程清空缓冲区之前,文件不会增长。

(FILE*不是文件描述符,顺便说一下)

应该更新文件描述符以访问整个文件。一般来说,当一个文件被打开时,文件的当前内容将被加载到内存中,它将被文件描述符引用,并且在文件外部的任何更新都不会在加载的内存中得到更新。

相关内容

  • 没有找到相关文章

最新更新