我正在编写一个程序来检查当前目录中的文件是否在 Unix 中经过一段时间后被修改。我用:
struct tm* clock; // create a time structure
struct stat attrib; // create a file attribute structure
DIR * directory = NULL; // create directory file
directory = opendir(cwd);
if(directory == NULL)
return -1;
struct dirent * ent;
time_t tim=time(NULL); // acquire time information
struct tm * now=localtime(&tim);
后来我有:
while((ent = readdir (directory)) != NULL)
{
stat(ent->d_name, &attrib); // get the attributes of file
clock = gmtime(&(attrib.st_mtime)); // Get the last modified time
{...//printf's to print all tm_ measurements and iyr,imonth,etc}
if(iyr<=clock->tm_year+1900 && imonth<=clock->tm_mon+1 && iday <= clock->tm_mday && ihour<=clock->tm_hour && imin <= clock ->tm_min)
{ ...}
原谅荒谬的条件,为什么 clock->tm_mon 会导致没有 seg 故障,而 clock->tm_mon+1 会导致 seg 故障崩溃?使用我上面的代码,段错误发生在循环中的一个打印命令之后。如果我创建一个整数 b,将其设置为等于 clock->tm_mon 并添加一个,使用它代替 clock->tm_mon+1,我仍然会遇到段错误,但稍后会打印几次。
iyr、imonth 等是正确代表最近几年、几个月等的整数,并且我已经确认,无论我尝试做什么来解释当月的 +1,seg 错误都发生在循环中。我还确认没有任何东西超过 if 条件,并且在循环的其余部分中没有任何事情发生在 if 条件之后。