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

C 如何使用open()而不是fopen()判断文本文件是否为空,c,linux,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只能与文件类型流一起使用。我在谷歌上搜索了一下,找不到任何解

如果可以使用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只能与文件类型流一起使用。我在谷歌上搜索了一下,找不到任何解决方案

这不是一个标准C不知道的C问题,而是一个Linux或POSIX问题

您不一定需要,而且您应该意识到,在Linux上,其他一些进程可以写入您打开的文件

然后,您可以使用with.st_size字段获取文件的大小,也可以使用fstat获取打开的文件描述符的大小

您还可以使用它来设置和查询打开的文件描述符的当前文件偏移量。

您可以使用系统调用stat。查看stat结构的st_size成员以获取大小(字节)。