所以,我有一个作业,基本上是一个比较系统调用速度而不是库函数的练习。我们正在对通过 stdin从文件中获取的字符串进行排序。我们应该使用 fstat 确定该文件是否是常规文件。我已经通读了手册页,虽然我知道它的作用,但我在弄清楚如何使用它时遇到了问题。
我知道它返回一个统计结构,所以我真的可以做一个变量并像那样存储它吗?前任:
int n;
struct stat *val;
n = fstat(0, val);
这就是你获得结构的方式吗?它是否返回其他地方?我需要访问 off_t st_size 变量,以便我知道文件有多少字节。这可以转换为整数吗?
另外,显然您可以使用st_mode字段来检查文件是否常规(使用宏S_ISREG(,但是...如何?它是否返回假或其他东西的真?这很烦人,因为我可以找到所有这些文档告诉我字段是什么,但不知道如何使用它们。
如果我有一个常规文件,我应该在任何函数调用之前分配足够的内存来存储它。如果没有,那么我会在阅读时重新分配内存。我已经完成了第二部分,只是不知道如何正确使用 fstat。
fstat
不分配内存,您需要为其提供预分配空间的地址。例如:
int n;
struct stat myStat;
n = fstat(0, &myStat);
请注意缺少指针。