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

时间:2016-03-28 15:19:13

标签: c linux fopen

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

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

如果size为零,则文件为空。

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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