Spec-Zone.ru › Ruby 2.5

class File::Stat

Parent:
Object
Included modules:
Comparable

Объекты класса File::Stat encapsulate common status information for File objects. The information is recorded at the moment the File::Stat object is created; changes made to the file after that point will not be reflected. File::Stat objects are returned by IO#stat, File::stat, File#lstat, and File::lstat. Many of these methods return platform-specific values, and not all values are meaningful on all systems. See also Kernel#test.

Public Class Methods

File::Stat.new(file_name) → stat Show source
static VALUE
rb_stat_init(VALUE obj, VALUE fname)
{
    struct stat st, *nst;

    FilePathValue(fname);
    fname = rb_str_encode_ospath(fname);
    if (STAT(StringValueCStr(fname), &st) == -1) {
        rb_sys_fail_path(fname);
    }
    if (DATA_PTR(obj)) {
        xfree(DATA_PTR(obj));
        DATA_PTR(obj) = NULL;
    }
    nst = ALLOC(struct stat);
    *nst = st;
    DATA_PTR(obj) = nst;

    return Qnil;
}

Создать объект File::Stat для данного имени файла (вызвав исключение, если файл не существует).

Методы общего доступа

stat <=> other_stat → -1, 0, 1, nil Показать исходный код
static VALUE
rb_stat_cmp(VALUE self, VALUE other)
{
    if (rb_obj_is_kind_of(other, rb_obj_class(self))) {
        struct timespec ts1 = stat_mtimespec(get_stat(self));
        struct timespec ts2 = stat_mtimespec(get_stat(other));
        if (ts1.tv_sec == ts2.tv_sec) {
            if (ts1.tv_nsec == ts2.tv_nsec) return INT2FIX(0);
            if (ts1.tv_nsec < ts2.tv_nsec) return INT2FIX(-1);
            return INT2FIX(1);
        }
        if (ts1.tv_sec < ts2.tv_sec) return INT2FIX(-1);
        return INT2FIX(1);
    }
    return Qnil;
}

Сравнивает объекты File::Stat путём сравнения их соответствующих времен изменения.

nil возвращается, если other_stat не является объектом File::Stat.

f1 = File.new("f1", "w")
sleep 1
f2 = File.new("f2", "w")
f1.stat <=> f2.stat   #=> -1
atime → time Показать исходный код
static VALUE
rb_stat_atime(VALUE self)
{
    return stat_atime(get_stat(self));
}

Возвращает время последнего доступа к этому файлу как объект класса Time.

File.stat("testfile").atime   #=> Wed Dec 31 18:00:00 CST 1969
birthtime → aTime Показать исходный код
static VALUE
rb_stat_birthtime(VALUE self)
{
    return stat_birthtime(get_stat(self));
}

Возвращает время создания stat.

Если платформа не поддерживает время создания, генерирует исключение NotImplementedError.

File.write("testfile", "foo")
sleep 10
File.write("testfile", "bar")
sleep 10
File.chmod(0644, "testfile")
sleep 10
File.read("testfile")
File.stat("testfile").birthtime   #=> 2014-02-24 11:19:17 +0900
File.stat("testfile").mtime       #=> 2014-02-24 11:19:27 +0900
File.stat("testfile").ctime       #=> 2014-02-24 11:19:37 +0900
File.stat("testfile").atime       #=> 2014-02-24 11:19:47 +0900
blksize → целое число или nil Показать исходный код
static VALUE
rb_stat_blksize(VALUE self)
{
#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
    return ULONG2NUM(get_stat(self)->st_blksize);
#else
    return Qnil;
#endif
}

Возвращает размер блока файловой системы. Возвращает nil на платформах, не поддерживающих эту информацию.

File.stat("testfile").blksize   #=> 4096
blockdev? → true или false Показать исходный код
static VALUE
rb_stat_b(VALUE obj)
{
#ifdef S_ISBLK
    if (S_ISBLK(get_stat(obj)->st_mode)) return Qtrue;

#endif
    return Qfalse;
}

Возвращает true , если файл является блочным устройством, false , если нет, или если операционная система не поддерживает эту функцию.

File.stat("testfile").blockdev?    #=> false
File.stat("/dev/hda1").blockdev?   #=> true
blocks → целое число или nil Показать исходный код
static VALUE
rb_stat_blocks(VALUE self)
{
#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
# if SIZEOF_STRUCT_STAT_ST_BLOCKS > SIZEOF_LONG
    return ULL2NUM(get_stat(self)->st_blocks);
# else
    return ULONG2NUM(get_stat(self)->st_blocks);
# endif
#else
    return Qnil;
#endif
}

Возвращает количество блоков файловой системы, выделенных для этого файла, или nil , если операционная система не поддерживает эту функцию.

File.stat("testfile").blocks   #=> 2
chardev? → true или false Показать исходный код
static VALUE
rb_stat_c(VALUE obj)
{
    if (S_ISCHR(get_stat(obj)->st_mode)) return Qtrue;

    return Qfalse;
}

Возвращает true , если файл является символьным устройством, false , если нет, или если операционная система не поддерживает эту функцию.

File.stat("/dev/tty").chardev?   #=> true
ctime → aTime Показать исходный код
static VALUE
rb_stat_ctime(VALUE self)
{
    return stat_ctime(get_stat(self));
}

Возвращает время изменения stat (то есть время изменения информации о каталоге файла, а не самого файла).

Обратите внимание, что в Windows (NTFS) возвращает время создания (время рождения).

File.stat("testfile").ctime   #=> Wed Apr 09 08:53:14 CDT 2003
dev → целое число Показать исходный код
static VALUE
rb_stat_dev(VALUE self)
{
    return DEVT2NUM(get_stat(self)->st_dev);
}

Возвращает целое число, представляющее устройство, на котором находится stat.

File.stat("testfile").dev   #=> 774
dev_major → целое число Показать исходный код
static VALUE
rb_stat_dev_major(VALUE self)
{
#if defined(major)
    return DEVT2NUM(major(get_stat(self)->st_dev));
#else
    return Qnil;
#endif
}

Возвращает старшую часть File_Stat#dev или nil.

File.stat("/dev/fd1").dev_major   #=> 2
File.stat("/dev/tty").dev_major   #=> 5
dev_minor → целое число Показать исходный код
static VALUE
rb_stat_dev_minor(VALUE self)
{
#if defined(minor)
    return DEVT2NUM(minor(get_stat(self)->st_dev));
#else
    return Qnil;
#endif
}

Возвращает младшую часть File_Stat#dev или nil.

File.stat("/dev/fd1").dev_minor   #=> 1
File.stat("/dev/tty").dev_minor   #=> 0
END_OF_DOCUMENT_MARKER
pipe? → true или false Показать исходный код
static VALUE
rb_stat_p(VALUE obj)
{
#ifdef S_IFIFO
    if (S_ISFIFO(get_stat(obj)->st_mode)) return Qtrue;

#endif
    return Qfalse;
}

Возвращает true, если операционная система поддерживает каналы, и stat является каналом; false в противном случае.

rdev → целое число или nil Показать исходный код
static VALUE
rb_stat_rdev(VALUE self)
{
#ifdef HAVE_STRUCT_STAT_ST_RDEV
    return DEVT2NUM(get_stat(self)->st_rdev);
#else
    return Qnil;
#endif
}

Возвращает целое число, представляющее тип устройства, на котором находится stat. Возвращает nil, если операционная система не поддерживает эту функцию.

File.stat("/dev/fd1").rdev   #=> 513
File.stat("/dev/tty").rdev   #=> 1280
rdev_major → целое число Показать исходный код
static VALUE
rb_stat_rdev_major(VALUE self)
{
#if defined(HAVE_STRUCT_STAT_ST_RDEV) && defined(major)
    return DEVT2NUM(major(get_stat(self)->st_rdev));
#else
    return Qnil;
#endif
}

Возвращает старшую часть File_Stat#rdev или nil.

File.stat("/dev/fd1").rdev_major   #=> 2
File.stat("/dev/tty").rdev_major   #=> 5
rdev_minor → целое число Показать исходный код
static VALUE
rb_stat_rdev_minor(VALUE self)
{
#if defined(HAVE_STRUCT_STAT_ST_RDEV) && defined(minor)
    return DEVT2NUM(minor(get_stat(self)->st_rdev));
#else
    return Qnil;
#endif
}

Возвращает младшую часть File_Stat#rdev или nil.

File.stat("/dev/fd1").rdev_minor   #=> 1
File.stat("/dev/tty").rdev_minor   #=> 0
readable? → true или false Показать исходный код
static VALUE
rb_stat_r(VALUE obj)
{
    struct stat *st = get_stat(obj);

#ifdef USE_GETEUID
    if (geteuid() == 0) return Qtrue;
#endif
#ifdef S_IRUSR
    if (rb_stat_owned(obj))
        return st->st_mode & S_IRUSR ? Qtrue : Qfalse;
#endif
#ifdef S_IRGRP
    if (rb_stat_grpowned(obj))
        return st->st_mode & S_IRGRP ? Qtrue : Qfalse;
#endif
#ifdef S_IROTH
    if (!(st->st_mode & S_IROTH)) return Qfalse;
#endif
    return Qtrue;
}

Возвращает true, если stat доступен для чтения для эффективного идентификатора пользователя этого процесса.

File.stat("testfile").readable?   #=> true
readable_real? → true или false Показать исходный код
static VALUE
rb_stat_R(VALUE obj)
{
    struct stat *st = get_stat(obj);

#ifdef USE_GETEUID
    if (getuid() == 0) return Qtrue;
#endif
#ifdef S_IRUSR
    if (rb_stat_rowned(obj))
        return st->st_mode & S_IRUSR ? Qtrue : Qfalse;
#endif
#ifdef S_IRGRP
    if (rb_group_member(get_stat(obj)->st_gid))
        return st->st_mode & S_IRGRP ? Qtrue : Qfalse;
#endif
#ifdef S_IROTH
    if (!(st->st_mode & S_IROTH)) return Qfalse;
#endif
    return Qtrue;
}

Возвращает true, если stat доступен для чтения для реального идентификатора пользователя этого процесса.

File.stat("testfile").readable_real?   #=> true
setgid? → true или false Показать исходный код
static VALUE
rb_stat_sgid(VALUE obj)
{
#ifdef S_ISGID
    if (get_stat(obj)->st_mode & S_ISGID) return Qtrue;
#endif
    return Qfalse;
}

Возвращает true, если у stat установлен бит разрешения set-group-id; false, если нет или если операционная система не поддерживает эту функцию.

File.stat("/usr/sbin/lpc").setgid?   #=> true
setuid? → true или false Показать исходный код
static VALUE
rb_stat_suid(VALUE obj)
{
#ifdef S_ISUID
    if (get_stat(obj)->st_mode & S_ISUID) return Qtrue;
#endif
    return Qfalse;
}

Возвращает true, если у stat установлен бит разрешения set-user-id; false, если нет или если операционная система не поддерживает эту функцию.

File.stat("/bin/su").setuid?   #=> true
size → целое число Показать исходный код
static VALUE
rb_stat_size(VALUE self)
{
    return OFFT2NUM(get_stat(self)->st_size);
}

Возвращает размер stat в байтах.

File.stat("testfile").size   #=> 66
size → целое число Показать исходный код
static VALUE
rb_stat_s(VALUE obj)
{
    off_t size = get_stat(obj)->st_size;

    if (size == 0) return Qnil;
    return OFFT2NUM(size);
}

Возвращает размер stat в байтах.

File.stat("testfile").size   #=> 66
socket? → true или false Показать исходный код
static VALUE
rb_stat_S(VALUE obj)
{
#ifdef S_ISSOCK
    if (S_ISSOCK(get_stat(obj)->st_mode)) return Qtrue;

#endif
    return Qfalse;
}

Возвращает true, если stat является сокетом; false, если нет или если операционная система не поддерживает эту функцию.

File.stat("testfile").socket?   #=> false
sticky? → true или false Показать исходный код
static VALUE
rb_stat_sticky(VALUE obj)
{
#ifdef S_ISVTX
    if (get_stat(obj)->st_mode & S_ISVTX) return Qtrue;
#endif
    return Qfalse;
}

Возвращает true, если у stat установлен бит «sticky»; false, если нет или если операционная система не поддерживает эту функцию.

File.stat("testfile").sticky?   #=> false
symlink? → true или false Показать исходный код
static VALUE
rb_stat_l(VALUE obj)
{
#ifdef S_ISLNK
    if (S_ISLNK(get_stat(obj)->st_mode)) return Qtrue;
#endif
    return Qfalse;
}

Возвращает true, если stat является символической ссылкой; false, если нет или если операционная система не поддерживает эту функцию. Так как File::stat автоматически следует за символическими ссылками, symlink? всегда будет true для объекта, возвращённого File::stat.

File.symlink("testfile", "alink")   #=> 0
File.stat("alink").symlink?         #=> false
File.lstat("alink").symlink?        #=> true
uid → целое число Показать исходный код
static VALUE
rb_stat_uid(VALUE self)
{
    return UIDT2NUM(get_stat(self)->st_uid);
}

Возвращает числовой идентификатор пользователя владельца stat.

File.stat("testfile").uid   #=> 501
world_readable? → целое число или nil Показать исходный код
static VALUE
rb_stat_wr(VALUE obj)
{
#ifdef S_IROTH
    struct stat *st = get_stat(obj);
    if ((st->st_mode & (S_IROTH)) == S_IROTH) {
        return UINT2NUM(st->st_mode & (S_IRUGO|S_IWUGO|S_IXUGO));
    }
    else {
        return Qnil;
    }
#endif
}

Если stat доступен для чтения другими пользователями, возвращает целое число, представляющее биты разрешений файла stat. Возвращает nil в противном случае. Значение битов зависит от платформы; в системах Unix см. stat(2).

m = File.stat("/etc/passwd").world_readable?  #=> 420
sprintf("%o", m)                              #=> "644"
world_writable? → целое число или nil Показать исходный код
static VALUE
rb_stat_ww(VALUE obj)
{
#ifdef S_IROTH
    struct stat *st = get_stat(obj);
    if ((st->st_mode & (S_IWOTH)) == S_IWOTH) {
        return UINT2NUM(st->st_mode & (S_IRUGO|S_IWUGO|S_IXUGO));
    }
    else {
        return Qnil;
    }
#endif
}

Если stat доступен для записи другими пользователями, возвращает целое число, представляющее биты разрешений файла stat. Возвращает nil в противном случае. Значение битов зависит от платформы; в системах Unix см. stat(2).

m = File.stat("/tmp").world_writable?         #=> 511
sprintf("%o", m)                              #=> "777"
writable? → true или false Показать исходный код
static VALUE
rb_stat_w(VALUE obj)
{
    struct stat *st = get_stat(obj);

#ifdef USE_GETEUID
    if (geteuid() == 0) return Qtrue;
#endif
#ifdef S_IWUSR
    if (rb_stat_owned(obj))
        return st->st_mode & S_IWUSR ? Qtrue : Qfalse;
#endif
#ifdef S_IWGRP
    if (rb_stat_grpowned(obj))
        return st->st_mode & S_IWGRP ? Qtrue : Qfalse;
#endif
#ifdef S_IWOTH
    if (!(st->st_mode & S_IWOTH)) return Qfalse;
#endif
    return Qtrue;
}

Возвращает true, если stat доступен для записи для эффективного идентификатора пользователя этого процесса.

File.stat("testfile").writable?   #=> true
writable_real? → true или false Показать исходный код
static VALUE
rb_stat_W(VALUE obj)
{
    struct stat *st = get_stat(obj);

#ifdef USE_GETEUID
    if (getuid() == 0) return Qtrue;
#endif
#ifdef S_IWUSR
    if (rb_stat_rowned(obj))
        return st->st_mode & S_IWUSR ? Qtrue : Qfalse;
#endif
#ifdef S_IWGRP
    if (rb_group_member(get_stat(obj)->st_gid))
        return st->st_mode & S_IWGRP ? Qtrue : Qfalse;
#endif
#ifdef S_IWOTH
    if (!(st->st_mode & S_IWOTH)) return Qfalse;
#endif
    return Qtrue;
}

Возвращает true, если stat доступен для записи для реального идентификатора пользователя этого процесса.

File.stat("testfile").writable_real?   #=> true
zero? → true или false Показать исходный код
static VALUE
rb_stat_z(VALUE obj)
{
    if (get_stat(obj)->st_size == 0) return Qtrue;
    return Qfalse;
}

Возвращает true, если stat является файлом нулевой длины; false в противном случае.

File.stat("testfile").zero?   #=> false

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API