module FileTest
FileTest implementiert Dateioperationen, die denen in File::Stat ähneln. Es existiert als eigenständiges Modul, und seine Methoden werden auch in die File-Klasse "eingeschleust". (Beachten Sie, dass dies nicht durch Einbindung geschieht: der Interpreter schummelt).
Öffentliche Instanzmethoden
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;
}
Gibt true zurück, wenn filepath auf ein Blockgerät zeigt, andernfalls false.
File.blockdev?('/dev/sda1') # => true File.blockdev?(File.new('t.tmp')) # => false
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;
}
Gibt true zurück, wenn filepath auf ein Zeichengerät zeigt, andernfalls false.
File.chardev?($stdin) # => true File.chardev?('t.txt') # => false
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;
}
Wenn ein Zeichenketten-Objekt gegeben ist, gibt true zurück, wenn path ein Zeichenkettenpfad ist, der zu einem Verzeichnis führt, oder zu einem symbolischen Link zu einem Verzeichnis; andernfalls false.
File.directory?('.') # => true File.directory?('foo') # => false File.symlink('.', 'dirlink') # => 0 File.directory?('dirlink') # => true File.symlink('t,txt', 'filelink') # => 0 File.directory?('filelink') # => false
Das Argument path kann ein IO-Objekt sein.
Source
static VALUE
rb_file_executable_p(VALUE obj, VALUE fname)
{
return RBOOL(rb_eaccess(fname, X_OK) >= 0);
}
Gibt true zurück, wenn die benannte Datei für die effektive Benutzer- und Gruppen-ID dieses Prozesses ausführbar ist. Siehe eaccess(3).
Windows unterstützt keine separaten Ausführungsberechtigungen von Leseberechtigungen. Unter Windows gilt eine Datei nur dann als ausführbar, wenn sie auf .bat, .cmd, .com oder .exe endet.
Beachten Sie, dass einige sicherheitsbezogene Funktionen auf Betriebssystemebene dazu führen können, dass dies true zurückgibt, obwohl die Datei für den effektiven Benutzer/die effektive Gruppe nicht ausführbar ist.
Source
static VALUE
rb_file_executable_real_p(VALUE obj, VALUE fname)
{
return RBOOL(rb_access(fname, X_OK) >= 0);
}
Gibt true zurück, wenn die benannte Datei für die tatsächliche Benutzer- und Gruppen-ID dieses Prozesses ausführbar ist. Siehe access(3).
Windows unterstützt keine separaten Ausführungsberechtigungen von Leseberechtigungen. Unter Windows gilt eine Datei nur dann als ausführbar, wenn sie auf .bat, .cmd, .com oder .exe endet.
Beachten Sie, dass einige sicherheitsbezogene Funktionen auf Betriebssystemebene dazu führen können, dass dies true zurückgibt, obwohl die Datei für den tatsächlichen Benutzer/die tatsächliche Gruppe nicht ausführbar ist.
Source
static VALUE
rb_file_exist_p(VALUE obj, VALUE fname)
{
struct stat st;
if (rb_stat(fname, &st) < 0) return Qfalse;
return Qtrue;
}
Gibt true zurück, wenn die benannte Datei existiert.
file_name kann ein IO-Objekt sein.
„Datei existiert“ bedeutet, dass der Systemaufruf stat() oder fstat() erfolgreich ist.
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));
}
Gibt true zurück, wenn die benannte Datei existiert und eine reguläre Datei ist.
file kann ein IO-Objekt sein.
Wenn das file-Argument ein symbolischer Link ist, wird der symbolische Link aufgelöst und die vom Link referenzierte Datei verwendet.
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;
}
Gibt true zurück, wenn die benannte Datei existiert und die effektive Gruppen-ID des aufrufenden Prozesses der Besitzer der Datei ist. Gibt unter Windows false zurück.
file_name kann ein IO-Objekt sein.
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
}
Gibt true zurück, wenn die benannten Dateien identisch sind.
file_1 und file_2 können ein IO-Objekt sein.
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
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());
}
Gibt true zurück, wenn die benannte Datei existiert und die effektive Benutzer-ID des aufrufenden Prozesses der Besitzer der Datei ist.
file_name kann ein IO-Objekt sein.
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;
}
Gibt true zurück, wenn filepath auf eine Pipe zeigt, andernfalls false.
File.mkfifo('tmp/fifo') File.pipe?('tmp/fifo') # => true File.pipe?('t.txt') # => false
Source
static VALUE
rb_file_readable_p(VALUE obj, VALUE fname)
{
return RBOOL(rb_eaccess(fname, R_OK) >= 0);
}
Gibt true zurück, wenn die benannte Datei für die effektive Benutzer- und Gruppen-ID dieses Prozesses lesbar ist. Siehe eaccess(3).
Beachten Sie, dass einige sicherheitsbezogene Funktionen auf Betriebssystemebene dazu führen können, dass dies true zurückgibt, obwohl die Datei für den effektiven Benutzer/die effektive Gruppe nicht lesbar ist.
Source
static VALUE
rb_file_readable_real_p(VALUE obj, VALUE fname)
{
return RBOOL(rb_access(fname, R_OK) >= 0);
}
Gibt true zurück, wenn die benannte Datei für die tatsächliche Benutzer- und Gruppen-ID dieses Prozesses lesbar ist. Siehe access(3).
Beachten Sie, dass einige sicherheitsbezogene Funktionen auf Betriebssystemebene dazu führen können, dass dies true zurückgibt, obwohl die Datei für den tatsächlichen Benutzer/die tatsächliche Gruppe nicht lesbar ist.
Source
static VALUE
rb_file_sgid_p(VALUE obj, VALUE fname)
{
#ifdef S_ISGID
return check3rdbyte(fname, S_ISGID);
#else
return Qfalse;
#endif
}
Gibt true zurück, wenn die benannte Datei das SetGID-Bit gesetzt hat.
file_name kann ein IO-Objekt sein.
Source
static VALUE
rb_file_suid_p(VALUE obj, VALUE fname)
{
#ifdef S_ISUID
return check3rdbyte(fname, S_ISUID);
#else
return Qfalse;
#endif
}
Gibt true zurück, wenn die benannte Datei das SetUID-Bit gesetzt hat.
file_name kann ein IO-Objekt sein.
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);
}
Gibt die Größe von file_name zurück.
file_name kann ein IO-Objekt sein.
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);
}
Gibt nil zurück, wenn file_name nicht existiert oder eine Größe von Null hat, andernfalls die Größe der Datei.
file_name kann ein IO-Objekt sein.
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;
}
Gibt true zurück, wenn filepath auf einen Socket zeigt, andernfalls false.
require 'socket' File.socket?(Socket.new(:INET, :STREAM)) # => true File.socket?(File.new('t.txt')) # => false
Source
static VALUE
rb_file_sticky_p(VALUE obj, VALUE fname)
{
#ifdef S_ISVTX
return check3rdbyte(fname, S_ISVTX);
#else
return Qfalse;
#endif
}
Gibt true zurück, wenn die benannte Datei das Sticky-Bit gesetzt hat.
file_name kann ein IO-Objekt sein.
Source
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;
}
Gibt true zurück, wenn filepath auf einen symbolischen Link zeigt, andernfalls false.
symlink = File.symlink('t.txt', 'symlink') File.symlink?('symlink') # => true File.symlink?('t.txt') # => false
Source
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;
}
Wenn file_name für andere lesbar ist, gibt eine Ganzzahl zurück, die die Dateiberechtigungsbits von file_name darstellt. Andernfalls wird nil zurückgegeben. Die Bedeutung der Bits hängt von der Plattform ab; unter Unix-Systemen siehe stat(2).
file_name kann ein IO-Objekt sein.
File.world_readable?("/etc/passwd") #=> 420 m = File.world_readable?("/etc/passwd") sprintf("%o", m) #=> "644"
Source
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;
}
Wenn file_name für andere beschreibbar ist, gibt eine Ganzzahl zurück, die die Dateiberechtigungsbits von file_name darstellt. Andernfalls wird nil zurückgegeben. Die Bedeutung der Bits hängt von der Plattform ab; unter Unix-Systemen siehe stat(2).
file_name kann ein IO-Objekt sein.
File.world_writable?("/tmp") #=> 511 m = File.world_writable?("/tmp") sprintf("%o", m) #=> "777"
Source
static VALUE
rb_file_writable_p(VALUE obj, VALUE fname)
{
return RBOOL(rb_eaccess(fname, W_OK) >= 0);
}
Gibt true zurück, wenn die benannte Datei für die effektive Benutzer- und Gruppen-ID dieses Prozesses beschreibbar ist. Siehe eaccess(3).
Beachten Sie, dass einige sicherheitsbezogene Funktionen auf Betriebssystemebene dazu führen können, dass dies true zurückgibt, obwohl die Datei für den effektiven Benutzer/die effektive Gruppe nicht beschreibbar ist.
Source
static VALUE
rb_file_writable_real_p(VALUE obj, VALUE fname)
{
return RBOOL(rb_access(fname, W_OK) >= 0);
}
Gibt true zurück, wenn die benannte Datei für die tatsächliche Benutzer- und Gruppen-ID dieses Prozesses beschreibbar ist. Siehe access(3).
Beachten Sie, dass einige sicherheitsbezogene Funktionen auf Betriebssystemebene dazu führen können, dass dies true zurückgibt, obwohl die Datei für den tatsächlichen Benutzer/die tatsächliche Gruppe nicht beschreibbar ist.
Source
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);
}
Gibt true zurück, wenn die benannte Datei existiert und eine Größe von Null hat.
file_name kann ein IO-Objekt sein.