Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
info = File.stat("somefile")total_bytes = info.blocks * info.blksize10.1.12. Опрос специальных свойств файла
У файла есть много свойств, которые можно опросить. Мы перечислим в этом разделе те встроенные методы, для которых не нашлось другого места. Почти все они являются предикатами.
Читая этот раздел (да и большую часть этой главы), помните о двух вещах. Во-первых, так как класс
FileFileTestFileTestFile::StatstatlstatВ некоторых операционных системах устройства подразделяются на блочные и символьные. Файл может ссылаться как на то, так и на другое, но не на оба сразу. Методы
blockdev?chardev?FileTestflag1 = FileTest::chardev?("/dev/hdisk0") # falseflag2 = FileTest::blockdev?("/dev/hdisk0") # trueИногда нужно знать, ассоциирован ли данный поток с терминалом. Метод
tty?IOisattyflag1 = STDIN.tty? # trueflag2 = File.new("diskfile").isatty # falseПоток может быть связан с каналом (pipe) или сокетом. В модуле
FileTestflag1 = FileTest::pipe?(myfile)flag2 = FileTest::socket?(myfile)Напомним, что каталог — это разновидность файла. Поэтому нужно уметь отличать каталоги от обычных файлов, для чего предназначены два метода из модуля
FileTestfile1 = File.new("/tmp")file2 = File.new("/tmp/myfile")test1 = file1.directory? # truetest2 = file1.file? # falsetest3 = file2.directory? # falsetest4 = file2.file? # trueВ классе
FileftypeFile::StatfiledirectoryblockSpecialcharacterSpecialfifolinksocketfifоthis_kind = File.ftype("/dev/hdisk0") # "blockSpecial"that_kind = File.new("/tmp").stat.ftype # "directory"В маске, описывающей режим файла, можно устанавливать или сбрасывать некоторые биты. Они не имеют прямого отношения к битам, обсуждавшимся в разделе 10.1.9. Речь идет о битах set-group-id, set-user-id и бите фиксации (sticky bit). Для каждого из них есть метод в модуле
FileTestfile = File.new("somefile")info = file.statsticky_flag = info.sticky?setgid_flag = info.setgid?setuid_flag = info.setuid?К дисковому файлу могут вести символические или физические ссылки (в тех операционных системах, где такой механизм поддерживается). Чтобы проверить, является ли файл символической ссылкой на другой файл, обратитесь к методу
symlink?FileTestnlinkFile::StatFile.symlink("yourfile","myfile") # Создать ссылкуis_sym = FileTest::symlink?("myfile") # truehard_count = File.new("myfile").stat.nlink # 0Отметим попутно, что в предыдущем примере мы воспользовались методом класса
symlinkFileВ редких случаях может понадобиться информация о файле еще более низкого уровня. В классе
File::Statdevrdevinofile = File.new("diskfile")info = file.statdevice = info.devdevtype = info.rdevinode = info.ino10.1.13. Каналы
Ruby поддерживает разные способы читать из канала и писать в него. Метод класса
IO.popencheck = IO.popen("spell","r+")check.puts("'T was brillig, and the slithy toves")check.puts("Did gyre and gimble in the wabe.")
