Class: File::Stat
Overview
Objects of class 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.
Instance Method Summary collapse
-
#<=>(other_stat) ⇒ -1, ...
Compares File::Stat objects by comparing their respective modification times.
-
#atime ⇒ Time
Returns the last access time for this file as an object of class
Time. -
#blksize ⇒ Integer?
Returns the native file system’s block size.
-
#blockdev? ⇒ Boolean
Returns
trueif the file is a block device,falseif it isn’t or if the operating system doesn’t support this feature. -
#blocks ⇒ Integer?
Returns the number of native file system blocks allocated for this file, or
nilif the operating system doesn’t support this feature. -
#chardev? ⇒ Boolean
Returns
trueif the file is a character device,falseif it isn’t or if the operating system doesn’t support this feature. -
#ctime ⇒ aTime
Returns the change time for stat (that is, the time directory information about the file was changed, not the file itself).
-
#dev ⇒ Fixnum
Returns an integer representing the device on which stat resides.
-
#dev_major ⇒ Fixnum
Returns the major part of
File_Stat#devornil. -
#dev_minor ⇒ Fixnum
Returns the minor part of
File_Stat#devornil. -
#directory? ⇒ Boolean
Returns
trueif stat is a directory,falseotherwise. -
#executable? ⇒ Boolean
Returns
trueif stat is executable or if the operating system doesn’t distinguish executable files from nonexecutable files. -
#executable_real? ⇒ Boolean
Same as
executable?, but tests using the real owner of the process. -
#file? ⇒ Boolean
Returns
trueif stat is a regular file (not a device file, pipe, socket, etc.). -
#ftype ⇒ String
Identifies the type of stat.
-
#gid ⇒ Fixnum
Returns the numeric group id of the owner of stat.
-
#grpowned? ⇒ Boolean
Returns true if the effective group id of the process is the same as the group id of stat.
-
#File::Stat.new(file_name) ⇒ Object
constructor
Create a File::Stat object for the given file name (raising an exception if the file doesn’t exist).
-
#initialize_copy(orig) ⇒ Object
:nodoc:.
-
#ino ⇒ Fixnum
Returns the inode number for stat.
-
#inspect ⇒ String
Produce a nicely formatted description of stat.
-
#mode ⇒ Fixnum
Returns an integer representing the permission bits of stat.
-
#mtime ⇒ aTime
Returns the modification time of stat.
-
#nlink ⇒ Fixnum
Returns the number of hard links to stat.
-
#owned? ⇒ Boolean
Returns
trueif the effective user id of the process is the same as the owner of stat. -
#pipe? ⇒ Boolean
Returns
trueif the operating system supports pipes and stat is a pipe;falseotherwise. -
#rdev ⇒ Fixnum?
Returns an integer representing the device type on which stat resides.
-
#rdev_major ⇒ Fixnum
Returns the major part of
File_Stat#rdevornil. -
#rdev_minor ⇒ Fixnum
Returns the minor part of
File_Stat#rdevornil. -
#readable? ⇒ Boolean
Returns
trueif stat is readable by the effective user id of this process. -
#readable_real? ⇒ Boolean
Returns
trueif stat is readable by the real user id of this process. -
#setgid? ⇒ Boolean
Returns
trueif stat has the set-group-id permission bit set,falseif it doesn’t or if the operating system doesn’t support this feature. -
#setuid? ⇒ Boolean
Returns
trueif stat has the set-user-id permission bit set,falseif it doesn’t or if the operating system doesn’t support this feature. -
#size ⇒ Fixnum
Returns the size of stat in bytes.
-
#size ⇒ Integer
Returns the size of stat in bytes.
-
#socket? ⇒ Boolean
Returns
trueif stat is a socket,falseif it isn’t or if the operating system doesn’t support this feature. -
#sticky? ⇒ Boolean
Returns
trueif stat has its sticky bit set,falseif it doesn’t or if the operating system doesn’t support this feature. -
#symlink? ⇒ Boolean
Returns
trueif stat is a symbolic link,falseif it isn’t or if the operating system doesn’t support this feature. -
#uid ⇒ Fixnum
Returns the numeric user id of the owner of stat.
-
#world_readable? ⇒ Fixnum?
If stat is readable by others, returns an integer representing the file permission bits of stat.
-
#world_writable? ⇒ Fixnum?
If stat is writable by others, returns an integer representing the file permission bits of stat.
-
#writable? ⇒ Boolean
Returns
trueif stat is writable by the effective user id of this process. -
#writable_real? ⇒ Boolean
Returns
trueif stat is writable by the real user id of this process. -
#zero? ⇒ Boolean
Returns
trueif stat is a zero-length file;falseotherwise.
Methods included from Comparable
#<, #<=, #==, #>, #>=, #between?
Constructor Details
#File::Stat.new(file_name) ⇒ Object
Create a File::Stat object for the given file name (raising an exception if the file doesn’t exist).
4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 |
# File 'file.c', line 4656 static VALUE rb_stat_init(VALUE obj, VALUE fname) { struct stat st, *nst; rb_secure(2); 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; } |
Instance Method Details
#<=>(other_stat) ⇒ -1, ...
Compares File::Stat objects by comparing their respective modification times.
nil is returned if the two values are incomparable.
f1 = File.new("f1", "w")
sleep 1
f2 = File.new("f2", "w")
f1.stat <=> f2.stat #=> -1
412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 |
# File 'file.c', line 412 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; } |
#atime ⇒ Time
Returns the last access time for this file as an object of class Time.
File.stat("testfile").atime #=> Wed Dec 31 18:00:00 CST 1969
796 797 798 799 800 |
# File 'file.c', line 796 static VALUE rb_stat_atime(VALUE self) { return stat_atime(get_stat(self)); } |
#blksize ⇒ Integer?
Returns the native file system’s block size. Will return nil on platforms that don’t support this information.
File.stat("testfile").blksize #=> 4096
678 679 680 681 682 683 684 685 686 |
# File 'file.c', line 678 static VALUE rb_stat_blksize(VALUE self) { #ifdef HAVE_STRUCT_STAT_ST_BLKSIZE return ULONG2NUM(get_stat(self)->st_blksize); #else return Qnil; #endif } |
#blockdev? ⇒ Boolean
Returns true if the file is a block device, false if it isn’t or if the operating system doesn’t support this feature.
File.stat("testfile").blockdev? #=> false
File.stat("/dev/hda1").blockdev? #=> true
4815 4816 4817 4818 4819 4820 4821 4822 4823 |
# File 'file.c', line 4815 static VALUE rb_stat_b(VALUE obj) { #ifdef S_ISBLK if (S_ISBLK(get_stat(obj)->st_mode)) return Qtrue; #endif return Qfalse; } |
#blocks ⇒ Integer?
Returns the number of native file system blocks allocated for this file, or nil if the operating system doesn’t support this feature.
File.stat("testfile").blocks #=> 2
699 700 701 702 703 704 705 706 707 708 709 710 711 |
# File 'file.c', line 699 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 } |
#chardev? ⇒ Boolean
Returns true if the file is a character device, false if it isn’t or if the operating system doesn’t support this feature.
File.stat("/dev/tty").chardev? #=> true
4837 4838 4839 4840 4841 4842 4843 |
# File 'file.c', line 4837 static VALUE rb_stat_c(VALUE obj) { if (S_ISCHR(get_stat(obj)->st_mode)) return Qtrue; return Qfalse; } |
#ctime ⇒ aTime
Returns the change time for stat (that is, the time directory information about the file was changed, not the file itself).
Note that on Windows (NTFS), returns creation time (birth time).
File.stat("testfile").ctime #=> Wed Apr 09 08:53:14 CDT 2003
832 833 834 835 836 |
# File 'file.c', line 832 static VALUE rb_stat_ctime(VALUE self) { return stat_ctime(get_stat(self)); } |
#dev ⇒ Fixnum
Returns an integer representing the device on which stat resides.
File.stat("testfile").dev #=> 774
451 452 453 454 455 |
# File 'file.c', line 451 static VALUE rb_stat_dev(VALUE self) { return DEVT2NUM(get_stat(self)->st_dev); } |
#dev_major ⇒ Fixnum
Returns the major part of File_Stat#dev or nil.
File.stat("/dev/fd1").dev_major #=> 2
File.stat("/dev/tty").dev_major #=> 5
468 469 470 471 472 473 474 475 476 |
# File 'file.c', line 468 static VALUE rb_stat_dev_major(VALUE self) { #if defined(major) return INT2NUM(major(get_stat(self)->st_dev)); #else return Qnil; #endif } |
#dev_minor ⇒ Fixnum
Returns the minor part of File_Stat#dev or nil.
File.stat("/dev/fd1").dev_minor #=> 1
File.stat("/dev/tty").dev_minor #=> 0
489 490 491 492 493 494 495 496 497 |
# File 'file.c', line 489 static VALUE rb_stat_dev_minor(VALUE self) { #if defined(minor) return INT2NUM(minor(get_stat(self)->st_dev)); #else return Qnil; #endif } |
#directory? ⇒ Boolean
Returns true if stat is a directory, false otherwise.
File.stat("testfile").directory? #=> false
File.stat(".").directory? #=> true
4729 4730 4731 4732 4733 4734 |
# File 'file.c', line 4729 static VALUE rb_stat_d(VALUE obj) { if (S_ISDIR(get_stat(obj)->st_mode)) return Qtrue; return Qfalse; } |
#executable? ⇒ Boolean
Returns true if stat is executable or if the operating system doesn’t distinguish executable files from nonexecutable files. The tests are made using the effective owner of the process.
File.stat("testfile").executable? #=> false
5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 |
# File 'file.c', line 5089 static VALUE rb_stat_x(VALUE obj) { struct stat *st = get_stat(obj); #ifdef USE_GETEUID if (geteuid() == 0) { return st->st_mode & S_IXUGO ? Qtrue : Qfalse; } #endif #ifdef S_IXUSR if (rb_stat_owned(obj)) return st->st_mode & S_IXUSR ? Qtrue : Qfalse; #endif #ifdef S_IXGRP if (rb_stat_grpowned(obj)) return st->st_mode & S_IXGRP ? Qtrue : Qfalse; #endif #ifdef S_IXOTH if (!(st->st_mode & S_IXOTH)) return Qfalse; #endif return Qtrue; } |
#executable_real? ⇒ Boolean
Same as executable?, but tests using the real owner of the process.
5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 |
# File 'file.c', line 5121 static VALUE rb_stat_X(VALUE obj) { struct stat *st = get_stat(obj); #ifdef USE_GETEUID if (getuid() == 0) { return st->st_mode & S_IXUGO ? Qtrue : Qfalse; } #endif #ifdef S_IXUSR if (rb_stat_rowned(obj)) return st->st_mode & S_IXUSR ? Qtrue : Qfalse; #endif #ifdef S_IXGRP if (rb_group_member(get_stat(obj)->st_gid)) return st->st_mode & S_IXGRP ? Qtrue : Qfalse; #endif #ifdef S_IXOTH if (!(st->st_mode & S_IXOTH)) return Qfalse; #endif return Qtrue; } |
#file? ⇒ Boolean
Returns true if stat is a regular file (not a device file, pipe, socket, etc.).
File.stat("testfile").file? #=> true
5156 5157 5158 5159 5160 5161 |
# File 'file.c', line 5156 static VALUE rb_stat_f(VALUE obj) { if (S_ISREG(get_stat(obj)->st_mode)) return Qtrue; return Qfalse; } |
#ftype ⇒ String
Identifies the type of stat. The return string is one of: “file”, “directory”, “characterSpecial”, “blockSpecial”, “fifo”, “link”, “socket”, or “unknown”.
File.stat("/dev/tty").ftype #=> "characterSpecial"
4712 4713 4714 4715 4716 |
# File 'file.c', line 4712 static VALUE rb_stat_ftype(VALUE obj) { return rb_file_ftype(get_stat(obj)); } |
#gid ⇒ Fixnum
Returns the numeric group id of the owner of stat.
File.stat("testfile").gid #=> 500
582 583 584 585 586 |
# File 'file.c', line 582 static VALUE rb_stat_gid(VALUE self) { return GIDT2NUM(get_stat(self)->st_gid); } |
#grpowned? ⇒ Boolean
Returns true if the effective group id of the process is the same as the group id of stat. On Windows NT, returns false.
File.stat("testfile").grpowned? #=> true
File.stat("/etc/passwd").grpowned? #=> false
4883 4884 4885 4886 4887 4888 4889 4890 |
# File 'file.c', line 4883 static VALUE rb_stat_grpowned(VALUE obj) { #ifndef _WIN32 if (rb_group_member(get_stat(obj)->st_gid)) return Qtrue; #endif return Qfalse; } |
#initialize_copy(orig) ⇒ Object
:nodoc:
4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 |
# File 'file.c', line 4679 static VALUE rb_stat_init_copy(VALUE copy, VALUE orig) { struct stat *nst; if (!OBJ_INIT_COPY(copy, orig)) return copy; if (DATA_PTR(copy)) { xfree(DATA_PTR(copy)); DATA_PTR(copy) = 0; } if (DATA_PTR(orig)) { nst = ALLOC(struct stat); *nst = *(struct stat*)DATA_PTR(orig); DATA_PTR(copy) = nst; } return copy; } |
#ino ⇒ Fixnum
Returns the inode number for stat.
File.stat("testfile").ino #=> 1083669
509 510 511 512 513 514 515 516 517 |
# File 'file.c', line 509 static VALUE rb_stat_ino(VALUE self) { #if SIZEOF_STRUCT_STAT_ST_INO > SIZEOF_LONG return ULL2NUM(get_stat(self)->st_ino); #else return ULONG2NUM(get_stat(self)->st_ino); #endif } |
#inspect ⇒ String
Produce a nicely formatted description of stat.
File.stat("/etc/passwd").inspect
#=> "#<File::Stat dev=0xe000005, ino=1078078, mode=0100644,
# nlink=1, uid=0, gid=0, rdev=0x0, size=1374, blksize=4096,
# blocks=8, atime=Wed Dec 10 10:16:12 CST 2003,
# mtime=Fri Sep 12 15:41:41 CDT 2003,
# ctime=Mon Oct 27 11:20:27 CST 2003>"
852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 |
# File 'file.c', line 852 static VALUE rb_stat_inspect(VALUE self) { VALUE str; size_t i; static const struct { const char *name; VALUE (*func)(VALUE); } member[] = { {"dev", rb_stat_dev}, {"ino", rb_stat_ino}, {"mode", rb_stat_mode}, {"nlink", rb_stat_nlink}, {"uid", rb_stat_uid}, {"gid", rb_stat_gid}, {"rdev", rb_stat_rdev}, {"size", rb_stat_size}, {"blksize", rb_stat_blksize}, {"blocks", rb_stat_blocks}, {"atime", rb_stat_atime}, {"mtime", rb_stat_mtime}, {"ctime", rb_stat_ctime}, }; struct stat* st; TypedData_Get_Struct(self, struct stat, &stat_data_type, st); if (!st) { return rb_sprintf("#<%s: uninitialized>", rb_obj_classname(self)); } str = rb_str_buf_new2("#<"); rb_str_buf_cat2(str, rb_obj_classname(self)); rb_str_buf_cat2(str, " "); for (i = 0; i < sizeof(member)/sizeof(member[0]); i++) { VALUE v; if (i > 0) { rb_str_buf_cat2(str, ", "); } rb_str_buf_cat2(str, member[i].name); rb_str_buf_cat2(str, "="); v = (*member[i].func)(self); if (i == 2) { /* mode */ rb_str_catf(str, "0%lo", (unsigned long)NUM2ULONG(v)); } else if (i == 0 || i == 6) { /* dev/rdev */ rb_str_catf(str, "0x%"PRI_DEVT_PREFIX"x", NUM2DEVT(v)); } else { rb_str_append(str, rb_inspect(v)); } } rb_str_buf_cat2(str, ">"); OBJ_INFECT(str, self); return str; } |
#mode ⇒ Fixnum
Returns an integer representing the permission bits of stat. The meaning of the bits is platform dependent; on Unix systems, see stat(2).
File.chmod(0644, "testfile") #=> 1
s = File.stat("testfile")
sprintf("%o", s.mode) #=> "100644"
532 533 534 535 536 |
# File 'file.c', line 532 static VALUE rb_stat_mode(VALUE self) { return UINT2NUM(ST2UINT(get_stat(self)->st_mode)); } |
#mtime ⇒ aTime
Returns the modification time of stat.
File.stat("testfile").mtime #=> Wed Apr 09 08:53:14 CDT 2003
812 813 814 815 816 |
# File 'file.c', line 812 static VALUE rb_stat_mtime(VALUE self) { return stat_mtime(get_stat(self)); } |
#nlink ⇒ Fixnum
Returns the number of hard links to stat.
File.stat("testfile").nlink #=> 1
File.link("testfile", "testfile.bak") #=> 0
File.stat("testfile").nlink #=> 2
550 551 552 553 554 |
# File 'file.c', line 550 static VALUE rb_stat_nlink(VALUE self) { return UINT2NUM(get_stat(self)->st_nlink); } |
#owned? ⇒ Boolean
Returns true if the effective user id of the process is the same as the owner of stat.
File.stat("testfile").owned? #=> true
File.stat("/etc/passwd").owned? #=> false
4857 4858 4859 4860 4861 4862 |
# File 'file.c', line 4857 static VALUE rb_stat_owned(VALUE obj) { if (get_stat(obj)->st_uid == geteuid()) return Qtrue; return Qfalse; } |
#pipe? ⇒ Boolean
Returns true if the operating system supports pipes and stat is a pipe; false otherwise.
4744 4745 4746 4747 4748 4749 4750 4751 4752 |
# File 'file.c', line 4744 static VALUE rb_stat_p(VALUE obj) { #ifdef S_IFIFO if (S_ISFIFO(get_stat(obj)->st_mode)) return Qtrue; #endif return Qfalse; } |
#rdev ⇒ Fixnum?
Returns an integer representing the device type on which stat resides. Returns nil if the operating system doesn’t support this feature.
File.stat("/dev/fd1").rdev #=> 513
File.stat("/dev/tty").rdev #=> 1280
600 601 602 603 604 605 606 607 608 |
# File 'file.c', line 600 static VALUE rb_stat_rdev(VALUE self) { #ifdef HAVE_STRUCT_STAT_ST_RDEV return DEVT2NUM(get_stat(self)->st_rdev); #else return Qnil; #endif } |
#rdev_major ⇒ Fixnum
Returns the major part of File_Stat#rdev or nil.
File.stat("/dev/fd1").rdev_major #=> 2
File.stat("/dev/tty").rdev_major #=> 5
621 622 623 624 625 626 627 628 629 |
# File 'file.c', line 621 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 } |
#rdev_minor ⇒ Fixnum
Returns the minor part of File_Stat#rdev or nil.
File.stat("/dev/fd1").rdev_minor #=> 1
File.stat("/dev/tty").rdev_minor #=> 0
642 643 644 645 646 647 648 649 650 |
# File 'file.c', line 642 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 } |
#readable? ⇒ Boolean
Returns true if stat is readable by the effective user id of this process.
File.stat("testfile").readable? #=> true
4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 |
# File 'file.c', line 4903 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; } |
#readable_real? ⇒ Boolean
Returns true if stat is readable by the real user id of this process.
File.stat("testfile").readable_real? #=> true
4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 |
# File 'file.c', line 4936 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; } |
#setgid? ⇒ Boolean
Returns true if stat has the set-group-id permission bit set, false if it doesn’t or if the operating system doesn’t support this feature.
File.stat("/usr/sbin/lpc").setgid? #=> true
5232 5233 5234 5235 5236 5237 5238 5239 |
# File 'file.c', line 5232 static VALUE rb_stat_sgid(VALUE obj) { #ifdef S_ISGID if (get_stat(obj)->st_mode & S_ISGID) return Qtrue; #endif return Qfalse; } |
#setuid? ⇒ Boolean
Returns true if stat has the set-user-id permission bit set, false if it doesn’t or if the operating system doesn’t support this feature.
File.stat("/bin/su").setuid? #=> true
5211 5212 5213 5214 5215 5216 5217 5218 |
# File 'file.c', line 5211 static VALUE rb_stat_suid(VALUE obj) { #ifdef S_ISUID if (get_stat(obj)->st_mode & S_ISUID) return Qtrue; #endif return Qfalse; } |
#size ⇒ Fixnum
Returns the size of stat in bytes.
File.stat("testfile").size #=> 66
661 662 663 664 665 |
# File 'file.c', line 661 static VALUE rb_stat_size(VALUE self) { return OFFT2NUM(get_stat(self)->st_size); } |
#size ⇒ Integer
Returns the size of stat in bytes.
File.stat("testfile").size #=> 66
5191 5192 5193 5194 5195 5196 5197 5198 |
# File 'file.c', line 5191 static VALUE rb_stat_s(VALUE obj) { off_t size = get_stat(obj)->st_size; if (size == 0) return Qnil; return OFFT2NUM(size); } |
#socket? ⇒ Boolean
Returns true if stat is a socket, false if it isn’t or if the operating system doesn’t support this feature.
File.stat("testfile").socket? #=> false
4792 4793 4794 4795 4796 4797 4798 4799 4800 |
# File 'file.c', line 4792 static VALUE rb_stat_S(VALUE obj) { #ifdef S_ISSOCK if (S_ISSOCK(get_stat(obj)->st_mode)) return Qtrue; #endif return Qfalse; } |
#sticky? ⇒ Boolean
Returns true if stat has its sticky bit set, false if it doesn’t or if the operating system doesn’t support this feature.
File.stat("testfile").sticky? #=> false
5253 5254 5255 5256 5257 5258 5259 5260 |
# File 'file.c', line 5253 static VALUE rb_stat_sticky(VALUE obj) { #ifdef S_ISVTX if (get_stat(obj)->st_mode & S_ISVTX) return Qtrue; #endif return Qfalse; } |
#symlink? ⇒ Boolean
Returns true if stat is a symbolic link, false if it isn’t or if the operating system doesn’t support this feature. As File::stat automatically follows symbolic links, symlink? will always be false for an object returned by File::stat.
File.symlink("testfile", "alink") #=> 0
File.stat("alink").symlink? #=> false
File.lstat("alink").symlink? #=> true
4771 4772 4773 4774 4775 4776 4777 4778 |
# File 'file.c', line 4771 static VALUE rb_stat_l(VALUE obj) { #ifdef S_ISLNK if (S_ISLNK(get_stat(obj)->st_mode)) return Qtrue; #endif return Qfalse; } |
#uid ⇒ Fixnum
Returns the numeric user id of the owner of stat.
File.stat("testfile").uid #=> 501
566 567 568 569 570 |
# File 'file.c', line 566 static VALUE rb_stat_uid(VALUE self) { return UIDT2NUM(get_stat(self)->st_uid); } |
#world_readable? ⇒ Fixnum?
If stat is readable by others, returns an integer representing the file permission bits of stat. Returns nil otherwise. The meaning of the bits is platform dependent; on Unix systems, see stat(2).
m = File.stat("/etc/passwd").world_readable? #=> 420
sprintf("%o", m) #=> "644"
4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 |
# File 'file.c', line 4971 static VALUE rb_stat_wr(VALUE obj) { #ifdef S_IROTH if ((get_stat(obj)->st_mode & (S_IROTH)) == S_IROTH) { return UINT2NUM(get_stat(obj)->st_mode & (S_IRUGO|S_IWUGO|S_IXUGO)); } else { return Qnil; } #endif } |
#world_writable? ⇒ Fixnum?
If stat is writable by others, returns an integer representing the file permission bits of stat. Returns nil otherwise. The meaning of the bits is platform dependent; on Unix systems, see stat(2).
m = File.stat("/tmp").world_writable? #=> 511
sprintf("%o", m) #=> "777"
5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 |
# File 'file.c', line 5063 static VALUE rb_stat_ww(VALUE obj) { #ifdef S_IROTH if ((get_stat(obj)->st_mode & (S_IWOTH)) == S_IWOTH) { return UINT2NUM(get_stat(obj)->st_mode & (S_IRUGO|S_IWUGO|S_IXUGO)); } else { return Qnil; } #endif } |
#writable? ⇒ Boolean
Returns true if stat is writable by the effective user id of this process.
File.stat("testfile").writable? #=> true
4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 |
# File 'file.c', line 4995 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; } |
#writable_real? ⇒ Boolean
Returns true if stat is writable by the real user id of this process.
File.stat("testfile").writable_real? #=> true
5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 |
# File 'file.c', line 5028 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; } |
#zero? ⇒ Boolean
Returns true if stat is a zero-length file; false otherwise.
File.stat("testfile").zero? #=> false
5174 5175 5176 5177 5178 5179 |
# File 'file.c', line 5174 static VALUE rb_stat_z(VALUE obj) { if (get_stat(obj)->st_size == 0) return Qtrue; return Qfalse; } |