0

我正在编写一个程序来检查当前目录中的文件是否在 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 条件之后。

4

0 回答 0