从 st_size 中读取自己大小的程序
Program wchich reads its own size from 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;
}
但我真的不明白如何编辑它以读取它自己的大小。
感谢您的宝贵时间和所有帮助:)
由于您的程序存在一些小错误,我努力编写了一个简单的工作版本:
#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]
是程序名称。参见 here。
- 不要 return 来自 main 的大小,因为这是为 returning 错误代码保留的。此外,
return 0
表示在 UNIX/Linux 中取得成功。通过使用 write
,您还可以通过管道传输结果以供进一步处理。
要读取程序自身的大小(按照 OP 的要求),只需编译 (gcc -o prog stat.c
) 和 运行 (./prog prog
)。
使用 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;
}
但我真的不明白如何编辑它以读取它自己的大小。
感谢您的宝贵时间和所有帮助:)
由于您的程序存在一些小错误,我努力编写了一个简单的工作版本:
#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]
是程序名称。参见 here。- 不要 return 来自 main 的大小,因为这是为 returning 错误代码保留的。此外,
return 0
表示在 UNIX/Linux 中取得成功。通过使用write
,您还可以通过管道传输结果以供进一步处理。
要读取程序自身的大小(按照 OP 的要求),只需编译 (gcc -o prog stat.c
) 和 运行 (./prog prog
)。