【发布时间】:2012-01-14 07:03:39
【问题描述】:
我现在已经用谷歌搜索了大约两个小时,但我找不到任何有用的答案。
手册页中指定的“stat”定义表明存在 st_ctime 字段。
struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* inode number */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of hard links */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ dev_t st_rdev; /* device ID (if special file) */ off_t st_size; /* total size, in bytes */ blksize_t st_blksize; /* blocksize for file system I/O */ blkcnt_t st_blocks; /* number of 512B blocks allocated */ time_t st_atime; /* time of last access */ time_t st_mtime; /* time of last modification */ time_t st_ctime; /* time of last status change */ };
但是,即使我使用的是 gcc(它的行为应该符合标准),我的系统似乎也不是这样。
事实上,所有时间字段(atime、mtime、ctime)都丢失了,因此该结构包含一些 atim、mtim 和 ctim 值,它们返回 timespec 而不是所需的 time_t 值。
现在我的问题:
- 为什么会这样?也许我包含了错误的标题,但我确定它一定是 sys/stat.h。
- 我没有找到太多关于 timespec 的信息,它是什么,为什么会返回这里?
- 即使我找到了解决方法,它对我有帮助还是任何其他系统无法执行我的代码?
我使用的是 Ubuntu 11.10 和 gcc 4.6.1。
我的代码(部分):
struct stat file_info;
time_t t;
if( lstat( path, &file_info ) == 0 ) {
struct tm* timeinfo;
t = file_info.st_ctime;
timeinfo = localtime( &t );
如果你能帮忙解决这个问题,我会很高兴,我真的不知道为什么我不能使用我的结构的 st_ctime 字段进行编译,而且像往常一样,gcc 在谈到谈话时并没有太大的帮助关于错误 ;-)
可能与#include 问题有关,但我无法确定是什么。
【问题讨论】:
-
我和你的一样用了一个 sn-p,可以在 Ubuntu 11.10 64 位和 GCC 4.6.1 上编译。你遇到了什么错误?
-
@Dan Fego 我得到一个字段无法解析错误。
-
嗯,您能否使用您使用的命令行发布整个编译输出?
-
好吧,对不起...这有点令人毛骨悚然,但是当我称之为“手动”时,我的 gcc 实际上会编译所有内容(gcc lister.c misc.c -o lister,其中 lister.c 是我遇到问题的文件和 misc.c 是具有所有一般功能的文件)但是使用 eclipse 它不会工作。我现在正试图通过所有的 make 文件。非常感谢,这里似乎不是真正的 C 问题,而是我的 IDE 的问题。再次抱歉,我似乎没有真正注意那里。
标签: c ubuntu system-calls stat