0

抽出したい情報を含む構造体を返すstat()呼び出しを行っています。これまでのところ、ファイルへのアクセス、変更、および最後の変更の時刻を取得するまで、必要なものを取得することに成功しています。

ctimeを使用して取得し、printfを使用して印刷したいと思います。

    printf("File: %s",argv[1]);
    printf("\nSize: %d",result.st_size);
    printf("        Blocks: %d",result.st_blocks);
    printf("        IO Block: %d",result.st_blksize);
    printf("\nDevice: 0x%x",result.st_dev);
    printf("        Inode: %d",result.st_ino);
    printf("        Links: %d",result.st_nlink);
//  printf("\nAccess: %s",ctime(result.st_atime));

このコードはうまく機能し、次の出力を提供します。

File: /etc/passwd
Size: 2250043           Blocks: 4416            IO Block: 4096
Device: 0x6804          Inode: 9738432          Links: 1

アクセス時間を取得したい最後の行のコメントを外すと、次の出力が得られます。

File: /etc/passwd
Size: 2250043           Blocks: 4416            IO Block: 4096
Segmentation fault

どうすればこれを修正できますか?また、デバイス、iノード、およびリンクが印刷される前に、セグメンテーション違反が発生するのはなぜですか?印刷してからセグメンテーション違反を発生させるべきではありませんか?

私はCの経験がほとんどありません。前のコースでAssemblyを勉強しましたが、ごく簡単です。time.hのAPIを読み込もうとしましたが、解決策を見つけることができませんでした。

私が得ることができるどんな助けやヒントにもとても感謝しています!

ありがとう、Z

4

2 に答える 2

3

関数ctimeはを期待しconst time_t *ます。あなたはおそらく欲しい:

printf("\nAccess: %s",ctime(&result.st_atime));
                            ^
于 2012-09-09T12:17:06.863 に答える
3

使ってください

ctime(&result.st_atime)

そして忘れないでください

#include <time.h>
于 2012-09-09T12:21:52.263 に答える