@@ -391,6 +391,28 @@ mrb_file__gethome(mrb_state *mrb, mrb_value klass)
391391#endif
392392}
393393394+static mrb_value
395+mrb_file_atime(mrb_state *mrb, mrb_value self)
396+{
397+int fd = mrb_io_fileno(mrb, self);
398+mrb_stat st;
399+400+if (mrb_fstat(fd, &st) == -1)
401+return mrb_nil_value();
402+return mrb_int_value(mrb, (mrb_int)st.st_atime);
403+}
404+405+static mrb_value
406+mrb_file_ctime(mrb_state *mrb, mrb_value self)
407+{
408+int fd = mrb_io_fileno(mrb, self);
409+mrb_stat st;
410+411+if (mrb_fstat(fd, &st) == -1)
412+return mrb_nil_value();
413+return mrb_int_value(mrb, (mrb_int)st.st_ctime);
414+}
415+394416static mrb_value
395417mrb_file_mtime(mrb_state *mrb, mrb_value self)
396418{
@@ -610,6 +632,8 @@ mrb_init_file(mrb_state *mrb)
610632mrb_define_class_method(mrb, file, "_gethome", mrb_file__gethome, MRB_ARGS_OPT(1));
611633612634mrb_define_method(mrb, file, "flock", mrb_file_flock, MRB_ARGS_REQ(1));
635+mrb_define_method(mrb, file, "_atime", mrb_file_atime, MRB_ARGS_NONE());
636+mrb_define_method(mrb, file, "_ctime", mrb_file_ctime, MRB_ARGS_NONE());
613637mrb_define_method(mrb, file, "_mtime", mrb_file_mtime, MRB_ARGS_NONE());
614638mrb_define_method(mrb, file, "size", mrb_file_size, MRB_ARGS_NONE());
615639mrb_define_method(mrb, file, "truncate", mrb_file_truncate, MRB_ARGS_REQ(1));