Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
sleep 10print "Пока!n"Если запустить эту программу, то вы увидите, что сообщения «Привет» и «Пока» появляются одновременно, после завершения
sleepЭто можно исправить, вызвав метод
flush$defoutKernelprint "Привет... "STDOUT.flushsleep 10print "Пока!n"Буферизацию можно отключить (или включить) методом
sync=syncbuf_flag = $defout.sync # trueSTDOUT.sync = falsebuf_flag = STDOUT.sync # falseЕсть еще по крайней мере один низкий уровень буферизации, который не виден. Если метод
getcungetcch = mystream.getc # ?Аmystream.ungetc(?C)ch = mystream.getc # ?CТут следует иметь в виду три вещи. Во-первых, только что упомянутая буферизация не имеет отношения к механизму буферизации, о котором мы говорили выше в этом разделе. Иными словами, предложение
sync=falseungetcungetcsysread10.1.9. Манипулирование правами владения и разрешениями на доступ к файлу
Вопрос о владении файлами и разрешениях сильно зависит от платформы. Как правило, в системе UNIX функций больше, чем предоставляет Ruby, а на других платформах многие возможности не реализованы.
Для определения владельца и группы файла (это целые числа) класс
File::Statuidgiddata = File.stat("somefile")owner_id = data.uidgroup_id = data.gidВ классе
File::Statperms = File.stat("somefile").modeВ классе
Filechownniluid = 201gid = 10File.chown(uid, gid, "alpha", "beta")f1 = File.new("delta")f1.chown(uid, gid)f2 = File.new("gamma")f2.chown(nil, gid) # Оставить идентификатор владельца без изменения.Разрешения можно изменить с помощью метода
chmodFile.chmod(0644, "epsilon", "theta")f = File.new("eta")f.chmod(0444)Процесс всегда работает от имени какого-то пользователя (возможно,
rootFile::Statinfo = File.stat("/tmp/secrets")rflag = info.readable?wflag = info.writable?xflag = info.executable?Иногда нужно отличить действующий идентификатор пользователя от реального. На этот случай предлагаются методы экземпляра
readable_real?writable_real?executable_real?info = File.stat("/tmp/secrets")rflag2 = info.readable_real?wflag2 = info.writable_real?xflag2 = info.executable_real?Можно сравнить владельца файла с действующим идентификатором пользователя (и идентификатором группы) текущего процесса. В классе
File::Statowned?grpowned?Отметим, что многие из этих методов можно найти также в модуле
FileTestrflag = FileTest::readable?("pentagon_files")# Прочие методы: writable? executable? readable_real?# writable_real? executable_real? owned? grpowned?# Отсутствуют здесь: uid gid mode.Маска
umask0777umask0220755Получить или установить маску можно с помощью метода
umaskFile
