如果可以使用 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/