Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
check.close_writelist = check.readlineslist.collect! { |x| x.chomp }# list равно %w[brillig gimble gyre slithy toves wabe]Отметим, что вызов
close_writeFile.popen("/usr/games/fortune") do |pipe|quote = pipe.getsputs quote# На чистом диске можно искать бесконечно. - Том Стил.endЕсли задана строка
"-"nilIOIO.popen("-")do |mypipe| if mypipe puts "Я родитель: pid = #{Process.pid}" listen = mypipe.gets puts listen else puts "Я потомок: pid = #{Process.pid}" endend# Печатается:# Я родитель: pid = 10580# Я потомок: pid = 10582Метод
pipepipe = IO.pipereader = pipe[0]writer = pipe[1]str = nilthread1 = Thread.new(reader,writer) do |reader,writer| # writer.close_write str = reader.gets reader.closeendthread2 = Thread.new(reader,writer) do |reader,writer| # reader.close_read writer.puts("What hath God wrought?") writer.closeendthread1.jointhread2.joinputs str # What hath God wrought?10.1.14. Специальные операции ввода/вывода
В Ruby можно выполнять низкоуровневые операции ввода/вывода. Мы только упомянем о существовании таких методов; если вы собираетесь ими пользоваться, имейте в виду, что некоторые машиннозависимы (различаются даже в разных версиях UNIX).
Метод
ioctlМетод
fcntlioctlМетод
selectKernelМетод
syscallKernelМетод
filenodesc = $stderr.fileno # 210.1.15. Неблокирующий ввод/вывод
«За кулисами» Ruby предпринимает согласованные меры, чтобы операции ввода/вывода не блокировали выполнение программы. В большинстве случаев для управления вводом/выводом можно пользоваться потоками — один поток может выполнить блокирующую операцию, а второй будет продолжать работу.
Это немного противоречит интуиции. Потоки Ruby работают в том же процессе, они не являются платформенными потоками. Быть может, вам кажется, что блокирующая операция ввода/вывода должна приостанавливать весь процесс, а значит, и все его потоки. Это не так — Ruby аккуратно управляет вводом/выводом прозрачно для программиста.
Но если вы все же хотите включить неблокирующий режим ввода/вывода, такая возможность есть. Небольшая библиотека
io/nonblockIOrequire 'io/nonblock'# ...test = mysock.nonblock? # falsemysock.nonblock = true # Отключить блокирующий режим.# ...mysock.nonblock = false # Снова включить его.mysock.nonblock { some_operation(mysock) }# Выполнить some_operation в неблокирующем режиме.mysock.nonblock(false) { other_operation(mysock) }# Выполнить other_operation в блокирующем режиме.10.1.16. Применение метода readpartial
Метод
readpartial
