首页 > 解决方案 > 程序 wchich 从 st_size 读取自己的大小

问题描述

使用 stat() 函数和主函数参数,我必须编写一个程序,该程序从 st_size 读取并打印它自己的大小。我已经尝试过的:

#include <sys/types.h> 
#include <sys/stat.h> 
int main( const char * szFileName ) 
{ 
  struct stat fileStat; 
  int err = stat( szFileName, &fileStat ); 
  if (0 != err) return 0; 
  return fileStat.st_size; 
}

但我真的不明白如何编辑它以读取它自己的大小。

感谢您的时间和所有的帮助:)

标签: clinuxstat

解决方案


由于您的程序存在一些小错误,因此我努力编写了一个简单的工作版本:

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>

#define BUF 20

int main(int argc, char **argv)
{
  struct stat fileStat;
  char buf[BUF];
  int err;

  err = stat( argv[1], &fileStat ); // No argv sanity checks
  if (0 != err)
    return EXIT_FAILURE;

  memset(buf, 0, BUF);
  snprintf(buf, BUF, "%d\n", fileStat.st_size);
  write(0, buf, BUF);
}

一些进一步的评论:

  • main(int argc, char** argv)是获取参数的方法。argv[1]包含第一个参数,如果提供argv[0]的是程序名称。见这里
  • 不要从 main 返回大小,因为这是为返回错误代码保留的。此外,return 0这意味着在 UNIX/Linux 中的成功。通过使用write,您还可以通过管道将结果进行进一步处理。

要读取程序自身的大小(按照 OP 的要求),只需编译 ( gcc -o prog stat.c) 并运行 ( ./prog prog)。


推荐阅读