c - 如何使用 open() 而不是 fopen() 判断文本文件是否为空

标签 c linux fopen

如果可以使用 fopen() 那么解决方案很简单:

FILE *fp;
fp = fopen(path, "r");
fseek (fp, 0, SEEK_END);
size = ftell(fp);

如果大小为零,则文件为空。

但是,如果要求不能使用 fopen() 该怎么办?相反,我必须使用像 open() 这样的系统调用:

int f = open(path, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR ); 

ftell() 只能与 FILE 类型流一起使用。我用谷歌搜索过这个并找不到任何解决方案。

最佳答案

这不是一个 C 问题(标准 C 不知道 open),而是一个 Linux 或 POSIX 问题。

您不一定需要open(2) ,并且您应该意识到,在 Linux 上,某些其他进程可以写入您已打开的文件。

然后你可以使用 stat(2) 获取文件的大小(使用 .st_size 字段),您可以使用 fstat

获取打开的文件描述符的大小

您也可以使用lseek(2) (它可以用于设置和查询打开的文件描述符的当前文件偏移量)。

关于c - 如何使用 open() 而不是 fopen() 判断文本文件是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36265286/

相关文章:

linux - 标准 Linux vulkan 库中缺少 vulkan 符号?

php - 如何用 fopen() 打开一个 http 文件?

c - 使用 fprintf 正确保存数据,但打印出奇怪的值

c++ - 在 C++ 应用程序中链接到 C 库

c - 用链表读取 C 中的输入

c - 代码打印什么? C语言练习

linux - 从文件中查找缺失的对

c - 非常简单的 DNS 服务器

java - 在 Linux 中使用 Java 创建 MySql 备份

arrays - Matlab将txt文件读入数组