Spec-Zone.ru › Ruby 3.1

модуль FileTest

FileTest реализует операции тестирования файлов, аналогичные тем, что используются в File::Stat. Он существует как автономный модуль, и его методы также внедрены в класс File. (Обратите внимание, что это делается не путём включения: интерпретатор обманывает).

Публичные методы экземпляра

blockdev?(file_name) → true or false Show source
static VALUE
rb_file_blockdev_p(VALUE obj, VALUE fname)
{
#ifndef S_ISBLK
#   ifdef S_IFBLK
#       define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
#   else
#       define S_ISBLK(m) (0)  /* anytime false */
#   endif
#endif

#ifdef S_ISBLK
    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qfalse;
    if (S_ISBLK(st.st_mode)) return Qtrue;

#endif
    return Qfalse;
}

Возвращает true если указанный файл является блочным устройством.

file_name может быть объектом IO.

chardev?(file_name) → true or false Show source
static VALUE
rb_file_chardev_p(VALUE obj, VALUE fname)
{
#ifndef S_ISCHR
#   define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
#endif

    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qfalse;
    if (S_ISCHR(st.st_mode)) return Qtrue;

    return Qfalse;
}

Возвращает true если указанный файл является символьным устройством.

file_name может быть объектом IO.

directory?(file_name) → true or false Show source
VALUE
rb_file_directory_p(VALUE obj, VALUE fname)
{
#ifndef S_ISDIR
#   define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#endif

    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qfalse;
    if (S_ISDIR(st.st_mode)) return Qtrue;
    return Qfalse;
}

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

file_name может быть объектом IO.

File.directory?(".")
empty?(p1)

Возвращает true если указанный файл существует и имеет нулевой размер.

file_name может быть объектом IO.

Alias for: zero?
executable?(file_name) → true or false Show source
static VALUE
rb_file_executable_p(VALUE obj, VALUE fname)
{
    return RBOOL(rb_eaccess(fname, X_OK) >= 0);
}

Возвращает true если указанный файл исполняемый для эффективного идентификатора пользователя и группы этого процесса. См. eaccess(3).

Windows не поддерживает права на исполнение отдельно от прав на чтение. В Windows файл считается исполняемым только если он заканчивается на .bat, .cmd, .com или .exe.

Обратите внимание, что некоторые функции безопасности на уровне ОС могут привести к возврату true, даже если файл не является исполняемым для эффективного пользователя/группы.

executable_real?(file_name) → true or false Show source
static VALUE
rb_file_executable_real_p(VALUE obj, VALUE fname)
{
    return RBOOL(rb_access(fname, X_OK) >= 0);
}

Возвращает true если указанный файл исполняемый для реального идентификатора пользователя и группы этого процесса. См. access(3).

Windows не поддерживает права на исполнение отдельно от прав на чтение. В Windows файл считается исполняемым только если он заканчивается на .bat, .cmd, .com или .exe.

Обратите внимание, что некоторые функции безопасности на уровне ОС могут привести к возврату true, даже если файл не является исполняемым для реального пользователя/группы.

exist?(file_name) → true or false Show source
static VALUE
rb_file_exist_p(VALUE obj, VALUE fname)
{
    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qfalse;
    return Qtrue;
}

Возвращает true если указанный файл существует.

file_name может быть объектом IO.

«файл существует» означает, что системный вызов stat() или fstat() выполнен успешно.

file?(file) → true or false Show source
static VALUE
rb_file_file_p(VALUE obj, VALUE fname)
{
    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qfalse;
    return RBOOL(S_ISREG(st.st_mode));
}

Возвращает true если указанный file существует и является обычным файлом.

file может быть объектом IO.

Если аргумент file является символической ссылкой, он разрешит символическую ссылку и будет использовать файл, на который указывает ссылка.

grpowned?(file_name) → true or false Show source
static VALUE
rb_file_grpowned_p(VALUE obj, VALUE fname)
{
#ifndef _WIN32
    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qfalse;
    if (rb_group_member(st.st_gid)) return Qtrue;
#endif
    return Qfalse;
}

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

file_name может быть объектом IO.

identical?(file_1, file_2) → true or false Show source
static VALUE
rb_file_identical_p(VALUE obj, VALUE fname1, VALUE fname2)
{
#ifndef _WIN32
    struct stat st1, st2;

    if (rb_stat(fname1, &st1) < 0) return Qfalse;
    if (rb_stat(fname2, &st2) < 0) return Qfalse;
    if (st1.st_dev != st2.st_dev) return Qfalse;
    if (st1.st_ino != st2.st_ino) return Qfalse;
    return Qtrue;
#else
    extern VALUE rb_w32_file_identical_p(VALUE, VALUE);
    return rb_w32_file_identical_p(fname1, fname2);
#endif
}

Возвращает true если указанные файлы идентичны.

file_1 и file_2 могут быть объектом IO.

open("a", "w") {}
p File.identical?("a", "a")      #=> true
p File.identical?("a", "./a")    #=> true
File.link("a", "b")
p File.identical?("a", "b")      #=> true
File.symlink("a", "c")
p File.identical?("a", "c")      #=> true
open("d", "w") {}
p File.identical?("a", "d")      #=> false
owned?(file_name) → true or false Show source
static VALUE
rb_file_owned_p(VALUE obj, VALUE fname)
{
    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qfalse;
    return RBOOL(st.st_uid == geteuid());
}

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

file_name может быть объектом IO.

pipe?(file_name) → true or false Show source
static VALUE
rb_file_pipe_p(VALUE obj, VALUE fname)
{
#ifdef S_IFIFO
#  ifndef S_ISFIFO
#    define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
#  endif

    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qfalse;
    if (S_ISFIFO(st.st_mode)) return Qtrue;

#endif
    return Qfalse;
}

Возвращает true если указанный файл является каналом (pipe).

file_name может быть объектом IO.

readable?(file_name) → true or false Show source
static VALUE
rb_file_readable_p(VALUE obj, VALUE fname)
{
    return RBOOL(rb_eaccess(fname, R_OK) >= 0);
}

Возвращает true если указанный файл доступен для чтения эффективным идентификатором пользователя и группы этого процесса. См. eaccess(3).

Обратите внимание, что некоторые функции безопасности на уровне ОС могут привести к возврату true, даже если файл не доступен для чтения эффективным пользователем/группой.

readable_real?(file_name) → true or false Show source
static VALUE
rb_file_readable_real_p(VALUE obj, VALUE fname)
{
    return RBOOL(rb_access(fname, R_OK) >= 0);
}

Возвращает true если указанный файл доступен для чтения реальным идентификатором пользователя и группы этого процесса. См. access(3).

Обратите внимание, что некоторые функции безопасности на уровне ОС могут привести к возврату true, даже если файл не доступен для чтения реальным пользователем/группой.

setgid?(file_name) → true or false Show source
static VALUE
rb_file_sgid_p(VALUE obj, VALUE fname)
{
#ifdef S_ISGID
    return check3rdbyte(fname, S_ISGID);
#else
    return Qfalse;
#endif
}

Возвращает true если у указанного файла установлен бит setgid.

file_name может быть объектом IO.

setuid?(file_name) → true or false Show source
static VALUE
rb_file_suid_p(VALUE obj, VALUE fname)
{
#ifdef S_ISUID
    return check3rdbyte(fname, S_ISUID);
#else
    return Qfalse;
#endif
}

Возвращает true если у указанного файла установлен бит setuid.

file_name может быть объектом IO.

size(file_name) → integer Show source
static VALUE
rb_file_s_size(VALUE klass, VALUE fname)
{
    struct stat st;

    if (rb_stat(fname, &st) < 0) {
        int e = errno;
        FilePathValue(fname);
        rb_syserr_fail_path(e, fname);
    }
    return OFFT2NUM(st.st_size);
}

Возвращает размер file_name.

file_name может быть объектом IO.

size?(file_name) → Integer or nil Show source
static VALUE
rb_file_size_p(VALUE obj, VALUE fname)
{
    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qnil;
    if (st.st_size == 0) return Qnil;
    return OFFT2NUM(st.st_size);
}

Возвращает nil если file_name не существует или имеет нулевой размер, размер файла в противном случае.

file_name может быть объектом IO.

socket?(file_name) → true or false Show source
static VALUE
rb_file_socket_p(VALUE obj, VALUE fname)
{
#ifndef S_ISSOCK
#  ifdef _S_ISSOCK
#    define S_ISSOCK(m) _S_ISSOCK(m)
#  else
#    ifdef _S_IFSOCK
#      define S_ISSOCK(m) (((m) & S_IFMT) == _S_IFSOCK)
#    else
#      ifdef S_IFSOCK
#        define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
#      endif
#    endif
#  endif
#endif

#ifdef S_ISSOCK
    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qfalse;
    if (S_ISSOCK(st.st_mode)) return Qtrue;

#endif
    return Qfalse;
}

Возвращает true если указанный файл является сокетом.

file_name может быть объектом IO.

sticky?(file_name) → true or false Show source
static VALUE
rb_file_sticky_p(VALUE obj, VALUE fname)
{
#ifdef S_ISVTX
    return check3rdbyte(fname, S_ISVTX);
#else
    return Qnil;
#endif
}

Возвращает true если у указанного файла установлен липкий бит.

file_name может быть объектом IO.

symlink?(file_name) → true или false Показать исходный код
static VALUE
rb_file_symlink_p(VALUE obj, VALUE fname)
{
#ifndef S_ISLNK
#  ifdef _S_ISLNK
#    define S_ISLNK(m) _S_ISLNK(m)
#  else
#    ifdef _S_IFLNK
#      define S_ISLNK(m) (((m) & S_IFMT) == _S_IFLNK)
#    else
#      ifdef S_IFLNK
#        define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
#      endif
#    endif
#  endif
#endif

#ifdef S_ISLNK
    struct stat st;

    FilePathValue(fname);
    fname = rb_str_encode_ospath(fname);
    if (lstat_without_gvl(StringValueCStr(fname), &st) < 0) return Qfalse;
    if (S_ISLNK(st.st_mode)) return Qtrue;
#endif

    return Qfalse;
}

Возвращает true, если указанный файл является символической ссылкой.

world_readable?(file_name) → целое число или nil Показать исходный код
static VALUE
rb_file_world_readable_p(VALUE obj, VALUE fname)
{
#ifdef S_IROTH
    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qnil;
    if ((st.st_mode & (S_IROTH)) == S_IROTH) {
        return UINT2NUM(st.st_mode & (S_IRUGO|S_IWUGO|S_IXUGO));
    }
#endif
    return Qnil;
}

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

file_name может быть объектом IO.

File.world_readable?("/etc/passwd")           #=> 420
m = File.world_readable?("/etc/passwd")
sprintf("%o", m)                              #=> "644"
world_writable?(file_name) → целое число или nil Показать исходный код
static VALUE
rb_file_world_writable_p(VALUE obj, VALUE fname)
{
#ifdef S_IWOTH
    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qnil;
    if ((st.st_mode & (S_IWOTH)) == S_IWOTH) {
        return UINT2NUM(st.st_mode & (S_IRUGO|S_IWUGO|S_IXUGO));
    }
#endif
    return Qnil;
}

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

file_name может быть объектом IO.

File.world_writable?("/tmp")                  #=> 511
m = File.world_writable?("/tmp")
sprintf("%o", m)                              #=> "777"
writable?(file_name) → true или false Показать исходный код
static VALUE
rb_file_writable_p(VALUE obj, VALUE fname)
{
    return RBOOL(rb_eaccess(fname, W_OK) >= 0);
}

Возвращает true, если указанный файл доступен для записи эффективным пользователем и группой текущего процесса. См. eaccess(3).

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

writable_real?(file_name) → true или false Показать исходный код
static VALUE
rb_file_writable_real_p(VALUE obj, VALUE fname)
{
    return RBOOL(rb_access(fname, W_OK) >= 0);
}

Возвращает true, если указанный файл доступен для записи реальным пользователем и группой текущего процесса. См. access(3).

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

zero?(file_name) → true или false Показать исходный код
static VALUE
rb_file_zero_p(VALUE obj, VALUE fname)
{
    struct stat st;

    if (rb_stat(fname, &st) < 0) return Qfalse;
    return RBOOL(st.st_size == 0);
}

Возвращает true, если указанный файл существует и имеет размер 0.

file_name может быть объектом IO.

Также является алиасом: empty?

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

Spec-Zone.ru

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