ruby文件操作

合集下载

Ruby编程入门教程

Ruby编程入门教程

Ruby编程入门教程Ruby是一种简洁、灵活且具有强大功能的面向对象编程语言。

它在编程界备受瞩目,并且在各种应用程序开发中广泛使用。

本教程将带领你从零开始学习Ruby编程,掌握基本的语法和概念,并逐步引领你进入更深入的内容。

无需担心,即使你是一个完全的编程初学者,也能够轻松入门Ruby编程。

1. 准备工作在开始学习Ruby编程前,你需要确保电脑中已经安装了Ruby 解释器。

你可以从Ruby官方网站(官网网址)上下载并安装适合你操作系统的版本。

安装完成后,你可以在命令行中输入"ruby -v"来验证是否成功安装。

2. Hello, Ruby!让我们从一个经典的例子开始,编写一个简单的Ruby程序,用于输出"Hello, Ruby!"这句话。

打开任意文本编辑器,新建一个以.rb为后缀的文件,比如hello.rb。

然后将下面的代码复制进去:```rubyputs "Hello, Ruby!"```保存文件后,在命令行中执行以下命令:```bashruby hello.rb```你将看到输出了"Hello, Ruby!",恭喜你成功运行了你的第一个Ruby程序!3. 变量和数据类型在Ruby中,我们可以使用变量来存储和操作数据。

Ruby有以下几种常用的数据类型:- 整数(Integer):用于表示整数,例如:1, 2, 3。

- 浮点数(Float):用于表示带有小数点的数值,例如:3.14, 2.718。

- 字符串(String):用于表示文本数据,例如:"Hello, Ruby!"。

- 布尔值(Boolean):用于表示真或假,只有两个取值:true (真)和false(假)。

以下是一些例子,展示了如何声明和使用变量:```rubynum1 = 10num2 = 5.5name = "Ruby"is_learning = true```4. 条件语句和循环结构条件语句和循环结构是编程中非常重要的概念,它们能够帮助我们根据特定的条件执行不同的代码。

ruby安装升级及命令

ruby安装升级及命令
还是不能启动,提示:no such file to load -- openssl (RuntimeError) . 其实这个提示误人不少,一般都以为没有安装openssl的ruby gem,如果安装的是系统自带版的ruby的话,要执行的是: sudo apt-get install libopenssl-ruby1.9
Successfully installed rails-2.3.2
6 gems installed
Installing ri documentation for activesupport-2.3.2...
Installing ri documentation for activerecord-2.3.2...
if [ -d "/usr/local/ruby-1.9.1/bin" ] ; then
PATH="/usr/local/ruby-1.9.1/binPATH"
fi
然后 注销 再登陆一次.
#如无意外
ruby -v
#ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-linux]
解压下,进行解压目录,执行一下 sudo ruby setup.rb , 再执行一下 gem -v,发现已经升级到了1.3.1版本.
gem update rails 升级就完成了.
gem升级后,gem list为空,要重新安装需要的gem包.
项目升级的一个问题:
自己对ActiveRecord的一个open class增强(opar.rb文件中)
再次执行 gem list,可以看到如下信息:
*** LOCAL GEMS ***

Ruby编程入门学习使用Ruby语言进行Web开发

Ruby编程入门学习使用Ruby语言进行Web开发

Ruby编程入门学习使用Ruby语言进行Web开发Ruby编程入门:使用Ruby语言进行Web开发Ruby作为一门灵活且富有表达力的编程语言,已经在Web开发中崭露头角。

它的简洁和强大功能吸引了许多开发者的注意力。

本文将介绍Ruby编程的基础知识,并演示如何利用Ruby语言进行Web开发。

一、Ruby简介Ruby是由松本行弘(Yukihiro Matsumoto)开发的一种面向对象的编程语言。

它的设计目标是让开发者更加快乐地编写代码,所以它的语法简单直观。

Ruby有一个非常活跃的开源社区,提供了大量的库和框架,使得在Web开发中使用它非常方便。

二、安装Ruby在开始学习Ruby编程之前,需要安装Ruby解释器。

Ruby的官方网站提供了各种操作系统的安装程序,用户只需根据自己的操作系统下载并按照说明进行安装。

三、基本语法1. 变量与数据类型Ruby是动态类型语言,它不需要声明变量类型。

只需简单地给一个变量赋值即可创建它。

Ruby支持多种数据类型,包括整数、浮点数、字符串、数组和哈希等。

2. 条件语句与循环Ruby提供了if语句、unless语句和case语句来实现条件判断。

此外,Ruby还提供了多种循环语句,如while循环、until循环和for循环等。

3. 函数与类Ruby是一种面向对象的编程语言,所以函数在Ruby中被称为方法。

我们可以使用def关键字定义方法,然后通过对象来调用它们。

此外,Ruby还支持类的定义和继承。

四、Ruby on Rails框架Ruby on Rails是一个基于Ruby的开发框架,旨在加快Web应用程序的开发速度。

它遵循“约定优于配置”的原则,提供了一套组织代码和处理请求的规范,从而使开发者能够更快地构建出稳健和可扩展的Web应用。

Rails框架提供了一些核心功能,如数据库管理、路由和模板等。

同时,它还有许多强大的插件和 gem 可供使用,大大简化了开发过程。

五、使用Ruby on Rails开发Web应用1. 创建新的Rails应用在命令行中运行以下命令,将在当前目录下创建一个新的Rails应用。

ros vim用法

ros vim用法

rosvim用法Vim是一款强大的文本编辑器,广泛应用于软件开发领域。

在ROS(机器人操作系统)环境中,Vim是常用的代码编辑工具之一。

本篇文章将介绍ROS环境下Vim的基本用法,包括安装、基本操作、文件操作、代码编辑等。

一、安装Vim在ROS环境中,可以通过以下命令安装Vim:```shellsudoapt-getinstallvim```安装完成后,Vim即可在ROS环境中使用。

二、基本操作1.打开文件:可以使用以下命令打开文件:```rubyvim文件名```2.保存文件:在Vim中,可以通过以下命令保存文件:```ruby:w```保存完成后,可以通过以下命令退出Vim:```ruby:q```3.进入Insert模式:可以通过以下命令进入Insert模式:```rubyi```4.退出Insert模式:可以通过以下命令退出Insert模式:```rubyEsc```5.移动光标:Vim支持多种移动光标的方式,包括上、下、左、右等方向键,以及Home和End键。

6.撤销操作:可以通过以下命令撤销一次操作:```rubyu```7.重做操作:可以通过以下命令重做一次撤销操作:```rubyCtrl+R```三、文件操作1.新建文件:可以使用以下命令新建一个空文件:```rubyvim+新建文件名打开文件路径/新文件路径/新文件名.txt(其中"新文件名"可以自定义)```2.删除文件:可以使用以下命令删除一个文件:在ROS环境中,删除文件需要注意以下几点:①如果该文件在系统根目录下,需要先通过rosversion-p获取文件属性;②如果要删除的目录中有其他重要文件,请务必确认删除后不会造成其他问题。

四、代码编辑和格式化代码使用方法根据具体需求和代码类型,可以使用Vim中的各种编辑和格式化功能。

常用的编辑和格式化功能包括缩进、注释、删除行等。

具体使用方法可以参考Vim的官方文档或相关教程。

ruby教程

ruby教程

ruby教程
Ruby教程简介
Ruby是一种开源的、简洁而有趣的动态编程语言。

它具有极
强的可读性和表达能力,对于初学者来说非常友好。

Ruby语
言的设计理念是“简单而不失强大”,它允许开发者以一种优雅的方式表达自己的想法。

Ruby的特点之一是它的面向对象编程能力。

在Ruby中,一切都是对象,并且每个对象可以拥有自己的方法和属性。

这种特性使得Ruby能够非常方便地实现庞大的复杂系统,并能够以
模块化的方式组织代码。

Ruby的语法非常灵活,允许开发者使用各种不同的编程风格。

它支持面向对象编程、函数式编程和元编程等多种范式,使得开发者能够选择最适合自己的方式来解决问题。

Ruby还有一个非常强大的特性是它的标准库。

标准库中包含
了大量的模块和类,提供了各种各样的功能,从文件操作到网络编程,从数据库连接到图形界面等等。

这使得开发者不需要从头开始编写所有功能,而是可以直接使用标准库中提供的模块和类来加速开发过程。

此外,Ruby社区非常活跃,并且有很多优秀的第三方库和框
架可供选择。

无论是开发Web应用、科学计算还是游戏开发,都能找到适合自己的解决方案。

本教程将介绍Ruby语言的基础知识和常用的编程技巧,帮助
读者快速入门并掌握Ruby的核心概念和特性。

通过学习本教程,读者将能够编写出简洁而功能强大的Ruby程序,并能够继续深入学习和探索更高级的主题。

让我们开始学习Ruby吧!。

uby操作excel文件

uby操作excel文件

uby操作excel文件使用ruby来操作excel文件首先需要在脚本里包含以下语句require 'win32ole'把win32ole包含进来后,就可以通过和windows下的excel api进行交互来对excel文件进行读写了.打开excel文件,对其中的sheet进行访问:excel = WIN32OLE::new('excel.Application')workbook = excel.Workbooks.Open('c:\examples\spreadsheet.xls') worksheet = workbook.Worksheets(1) #定位到第一个sheetworksheet.Select读取数据:worksheet.Range('a12')['Value'] #读取a12中的数据data = worksheet.Range('a1:c12')['Value'] #将数据读入到一个二维表找到第一处a列的值为空值line = 1while worksheet.Range("a#{line}")['Value']line=line+1end #line的值为第一处空白行的行数将第一列的值读入到一个数组中line = '1'data = []while worksheet.Range("a#{line}")['Value']data << worksheet.Range("a#{line}:d#{line}")['Value']line.succ!end将数据写入到excel表格中worksheet.Range('e2')['Value'] = Time.now.strftime '%d/%m/%Y' #单个值worksheet.Range('a5:c5')['Value'] = ['Test', '25', 'result'] #将一个数组写入调用宏定义excel.Run('SortByNumber')设置背景色worksheet.Range('a3:f5').Interior['ColorIndex'] = 36 #pale yellow# 将背景色恢复成无色worksheet.Range('a3:f5').Interior['ColorIndex'] = -4142 # XlColorIndexNone constant# 使用Excel constant 将背景色恢复成无色worksheet.Range('a3:f5').Interior['ColorIndex'] =ExcelConst::XlColorIndexNone保存workbook.Close(1)# 或workbook.SaveAs 'myfile.xls'# 默认路径是系统定义的"我的文档"结束会话excel.Quit一些相对完整的代码片段创建一个excel文件并保存require 'win32ole'excel = WIN32OLE.new("excel.application")excel.visible = true # in case you want to see what happensworkbook = excel.workbooks.addworkbook.saveas('c:\examples\spreadsheet1.xls')workbook.close操作excel文件的几个重要元素Excel => workbook => worksheet => range(cell)我理解的是excel为类名,workbook为一个具体的(excel文件)实例,创建好实例后,worksheet是实例(workbook,工作簿)中的一个工作表,然后可以对工作表中的每个单元格(range(cell))进行具体的读写------------------按照这样操作肯定没有错,不过下面的这些语句又让我有些疑惑excel.workbooks("Mappe1").worksheets("Tabelle1").range("a1").value #读取名为Mappe1的excel文件中工作表名为Tabelle1的a1单元格中的值excel.worksheets("Tabelle1").range("a1").value #作用同第一条语句excel.activeworkbook.activesheet.range("a1").value #作用同第一条语句excel.activesheet.range("a1").value #作用同第一条语句excel.range("a1").value #作用同第一条语句excel可以直接操作所有的属性,默认为当前活跃的工作簿/工作表对单元格的操作:某个单元格: sheet.range("a1")a1到c3的值: sheet.range("a1", "c3") 或sheet.range("a1:c3")第一列: sheet.range("a:a")第三行: sheet.range("3:3")获得单元格的值:range.text #读取值,返回为字符串格式,如果单元格内为数字,有可能会被截断小数点后的位数sheet.range("a1").textrange.value #读取值,数字不会截断sheet.range("a1").value对单元格设置值sheet.range("a1").value = 1.2345或sheet.range("a1").value = '1.2345'迭代访问:sheet.range("a1:a10").each{|cell|puts cell.value}如果范围是一个矩形,则会按行循环迭代访问sheet.range("a1:b5").each{|cell|puts cell.value}block迭代,并打印出每行的第一个值。

绿宝石金手指代码大全

绿宝石金手指代码大全绿宝石(Ruby)是一种简单易学、高效实用的面向对象的编程语言,它的设计者松本行弘(Matz)在1993年首次发布了它。

作为一种动态语言,它注重程序员的生产力和代码的简洁性。

在Ruby的世界里,代码的可读性和开发效率是至关重要的,因此绿宝石金手指代码的编写就显得尤为重要。

绿宝石金手指代码是指那些简洁、高效、优雅的代码,它们能够让程序员事半功倍,提高开发效率,减少出错概率,提升代码的可维护性。

在本文档中,我们将为您提供一份绿宝石金手指代码大全,希望能够帮助您更好地理解和应用绿宝石编程语言。

1. 高效的字符串处理。

在绿宝石中,字符串处理是一个非常常见的任务。

以下是一个高效的字符串处理示例:```ruby。

str = "hello, world"# 替换字符串中的逗号。

str.sub!(',', '!')。

puts str # 输出 hello! world。

```。

2. 简洁的数组操作。

数组是绿宝石中常用的数据结构之一,以下是一个简洁的数组操作示例:```ruby。

arr = [1, 2, 3, 4, 5]# 使用map方法对数组中的每个元素进行平方操作。

new_arr = arr.map { |x| x2 }。

puts new_arr # 输出 [1, 4, 9, 16, 25]```。

3. 优雅的文件操作。

文件操作是编程中常见的任务之一,以下是一个优雅的文件操作示例:```ruby。

File.open('example.txt', 'w') do |file|。

file.puts "Hello, world!"end。

```。

4. 灵活的异常处理。

异常处理是保证程序稳定性的重要手段,以下是一个灵活的异常处理示例:```ruby。

begin。

# 可能会出现异常的代码。

rescue StandardError => e。

rucky 语法

rucky 语法Rucky语法入门指南Rucky是一种简单易学的编程语言,它结合了Ruby和Lucky两种语言的特点,旨在提供一种简洁、优雅且易于使用的编程语言。

本文将介绍Rucky语法的基本要点,帮助读者快速入门。

1. 变量和数据类型在Rucky中,变量的声明不需要指定数据类型,可以直接使用。

例如:```name = "Rucky"age = 25```Rucky支持多种数据类型,包括字符串、整数、浮点数、布尔值等。

可以根据需要随时进行类型转换。

2. 条件语句Rucky使用if语句进行条件判断。

例如:```if age > 18puts "成年人"elseputs "未成年人"```Rucky中使用end来标记代码块的结束,使代码结构清晰。

3. 循环语句Rucky提供了多种循环语句,包括while循环和for循环。

例如:```while i < 10puts ii += 1endfor i in 1..5puts iend```Rucky中的循环语句使用do和end来标记代码块的开始和结束。

4. 函数和方法在Rucky中,函数使用def关键字定义,方法使用class关键字定义。

例如:```def add(a, b)return a + bclass Persondef initialize(name)@name = nameenddef say_helloputs "Hello, #{@name}!"endend```Rucky中的方法可以通过实例化对象来调用。

5. 异常处理Rucky使用begin和rescue来处理异常。

例如:```begin# 可能发生异常的代码rescue# 异常处理代码end```Rucky中的异常处理可以捕获并处理异常,保证程序的正常运行。

6. 类和模块Rucky支持面向对象编程,可以使用class关键字定义类,使用module关键字定义模块。

Ruby 语言介绍

Ruby语言介绍
目录
Ruby语言介绍 (1)
目录 (1)
1.基本的ruby语法 (2)
1.1变量、常量和类型 (2)
1.2注释 (2)
1.3循环和分支 (2)
1.4正则表达式 (4)
2,常用函数 (7)
2.1Numeric 类 (7)
2.2Float 类 (7)
2.3String 类 (7)
2.4Array 类 (9)
2.5Hash 类 (11)
1.基本的ruby语法
1.1变量、常量和类型
1)定义变量
2)变量内插
在双引号内使用“#(变虽名}"内插变最
1.2注释
1)单行注释:以#开头,如:#注释内容
2)多行注释:在=begin和=end之间定义,如: =begin
注释内容
=end
13循环和分支
1.3.4 类
135模块
方法说明
include,watir' 将模块的功能添加到当前空间中,不加载己加载的文件
1.3.6 case 语句case x
1.4正则表达式
1.4.1普通字符
普通字符由字母、数字、下划线和特殊符号组成。

4/13
如:
表达式/b/在匹配字符“abed”时,匹配的内容是“b” 表达式/b_/在匹配字符"ab_cd”时,匹
配的内容是“b_”
1.4.2转义符
1.4.3匹配多种字符
1.4.4修饰匹配次数的方法
1-4.5匹配模式
2.常用函数2.1 Numeric 类
2. 4 Array 类
2.5 Hash 类。

PHP、Python、Ruby的(数据库、文件)比较(原创)

PHP、Python、Ruby的比较(一)主题:数据库、文件的操作侯惠阳(PHPer.yang)我和大家讨论的是(PHP、Python、Ruby)这三种脚本语言各自的特性。

今后每期主题不同,分别阐述他们的效率以及特点。

这一期讨论的是:数据库、文件的操作。

一:PHP部分:A:读取数据库方面PHP对于数据库操作方面比较简单,可以使用MySQL给PHP写的扩展mysql*、mysqli*,以及PHP官方自己写的Mysqlnd。

这里其实我主要想说的是mysql_connect();这个函数。

注意第三个参数new_link(bool)。

如果用同样的参数第二次调用mysql_connect(),将不会建立新连接,而将返回已经打开的连接标识。

参数new_link 改变此行为并使mysql_connect() 总是打开新的连接,甚至当mysql_connect() 曾在前面被用同样的参数调用过。

普通操作:<?php$conn = mysql_connect(“localhost”,”root”,””,true);mysql_select_db(“test”,$conn);$query = mysql_query(“select * from test”);while($rows = mysql_fetch_array($query)) {…}…带存储过程的操作:Mysqlcreate procedure hhy(in yumail varchar(20),out _s int,out _uid int)beginif exists(select * from user where umail = yumail) thenset _s = 1;select uid into _uid from user where umail = yumail;elseset _s = 0;end if;endPHP中使用:mysql_query(“call hhy('test@',@_s,@_uid);”);mysql_query(“select @_s,@_uid;”);…这部分以后在详细叙述。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1ruby文件操作关键字:file ruby转!1检测文件是否存在及其大小FileTest的exist?方法可以检测一个文件是否存在:Ruby代码1.flag=FileTest::exist?("LochNessMonster")2.flag=FileTest::exists?("UFO")3.#exists?is a synonym for exist?Ruby代码1.flag=FileTest::exist?("LochNessMonster")2.flag=FileTest::exists?("UFO")3.#exists?is a synonym for exist?如果我们想要知道文件是否有内容,可以使用File::Stat的zero?方法:Ruby代码1.flag=File.new("somefile").stat.zero?Ruby代码1.flag=File.new("somefile").stat.zero?这个将会返回true,这是因为在ruby中0也是true,nil才是false.所以我们可以使用size?方法:Ruby代码1.if File.new("myfile").stat.size?2.puts"The file has contents."3.else4.puts"The file is empty."5.end1.if File.new("myfile").stat.size?2.puts"The file has contents."3.else4.puts"The file is empty."5.endFileTest模块里面也有zero?和size?方法:Ruby代码1.flag1=FileTest::zero?("file1")2.flag2=FileTest::size?("file2")Ruby代码1.flag1=FileTest::zero?("file1")2.flag2=FileTest::size?("file2")这里还有一个size方法:Ruby代码1.size1=File.size("file1")2.size2=File.stat("file2").sizeRuby代码1.size1=File.size("file1")2.size2=File.stat("file2").size2检测特殊文件属性这边要注意,File类mix了FIleTest模块,并且FileTest模块和File::Stat 模块功能上也有很多重复.unix/linux有面向字符和面向块的设备。

FileTest的方法blockdev?和chardev?可以进行测试:1.flag1=FileTest::chardev?("/dev/hdisk0")#false2.flag2=FileTest::blockdev?("/dev/hdisk0")#trueRuby代码1.flag1=FileTest::chardev?("/dev/hdisk0")#false2.flag2=FileTest::blockdev?("/dev/hdisk0")#true有时我们想要知道一个流是否联系到了终端,这时我们可以使用IO类的tty?方法:Ruby代码1.flag1=STDIN.tty?#true2.flag2=File.new("diskfile").isatty#falseRuby代码1.flag1=STDIN.tty?#true2.flag2=File.new("diskfile").isatty#false一个流可以是一个管道,或者一个socket:Ruby代码1.flag1=FileTest::pipe?(myfile)2.flag2=FileTest::socket?(myfile)Ruby代码1.flag1=FileTest::pipe?(myfile)2.flag2=FileTest::socket?(myfile)要区分目录和普通文件我们这样使用:Ruby代码1.file1=File.new("/tmp")2.file2=File.new("/tmp/myfile")3.test1=file1.directory?#true4.test2=file1.file?#false5.test3=file2.directory?#false6.test4=file2.file?#trueRuby代码1.file1=File.new("/tmp")2.file2=File.new("/tmp/myfile")3.test1=file1.directory?#true4.test2=file1.file?#false5.test3=file2.directory?#false6.test4=file2.file?#trueFile还有一个类方法ftype,他将返回流的类型.他也在File::Stat里面,只不过是实例方法.它的返回值可能是下面的字符串(file、directory、blockSpecial、characterSpecial、fifo、link或socket).Ruby代码1.this_kind=File.ftype("/dev/hdisk0")#"blockSpecial"2.that_kind=File.new("/tmp").stat.ftype#"directory"Ruby代码1.this_kind=File.ftype("/dev/hdisk0")#"blockSpecial"2.that_kind=File.new("/tmp").stat.ftype#"directory"要测试一个文件是否为另一个文件的链接,可以使用FileTest的symlink?方法,要计算链接数量,可以使用nlink方法:Ruby代码1.File.symlink("yourfile","myfile")#Make a link2.is_sym=FileTest::symlink?("myfile")#true3.hard_count=File.new("myfile").stat.nlink#0Ruby代码1.File.symlink("yourfile","myfile")#Make a link2.is_sym=FileTest::symlink?("myfile")#true3.hard_count=File.new("myfile").stat.nlink#03使用管道ruby中使用IO.popen打开管道:Ruby代码1.check=IO.popen("spell","r+")2.check.puts("'T was brillig,and the slithy toves")3.check.puts("Did gyre and gimble in the wabe.")4.check.close_write5.list=check.readlines6.list.collect!{|x|x.chomp}7.#list is now%w[brillig gimble gyre slithy toves wabe]Ruby代码1.check=IO.popen("spell","r+")2.check.puts("'T was brillig,and the slithy toves")3.check.puts("Did gyre and gimble in the wabe.")4.check.close_write5.list=check.readlines6.list.collect!{|x|x.chomp}7.#list is now%w[brillig gimble gyre slithy toves wabe]要注意必须调用close_write,如果没有调用它,读取管道的时候,就不能到达文件的末尾.下面是一个block的形式:Ruby代码1.File.popen("/usr/games/fortune")do|pipe|2.quote=pipe.gets3.puts quote4.#On a clean disk,you can seek forever.-Thomas Steel5.endRuby代码1.File.popen("/usr/games/fortune")do|pipe|2.quote=pipe.gets3.puts quote4.#On a clean disk,you can seek forever.-Thomas Steel5.end如果指定了一个字符串"-",那么一个新的ruby实例将被创建.如果指定了一个block,那么这个block将会作为两个独立的进程运行。

子进程得到nil,父进程得到一个IO对象:Ruby代码1.IO.popen("-")do|mypipe|2.if mypipe3.puts"I'm the parent:pid=#{Process.pid}"4.listen=mypipe.gets5.puts listen6.else7.puts"I'm the child:pid=#{Process.pid}"8.end9.end10.11.#Prints:12.#I'm the parent:pid=1058013.#I'm the child:pid=10582Ruby代码1.IO.popen("-")do|mypipe|2.if mypipe3.puts"I'm the parent:pid=#{Process.pid}"4.listen=mypipe.gets5.puts listen6.else7.puts"I'm the child:pid=#{Process.pid}"8.end9.end10.11.#Prints:12.#I'm the parent:pid=1058013.#I'm the child:pid=10582pipe方法也返回互相连接的一对管道:Ruby代码1.pipe=IO.pipe2.reader=pipe[0]3.writer=pipe[1]4.5.str=nil6.thread1=Thread.new(reader,writer)do|reader,writer|7.#writer.close_write8.str=reader.gets9.reader.close10.end11.12.thread2=Thread.new(reader,writer)do|reader,writer|13.#reader.close_read14.writer.puts("What hath God wrought?")15.writer.close16.end17.18.thread1.join19.thread2.join20.21.puts str#What hath God wrought?Ruby代码1.pipe=IO.pipe2.reader=pipe[0]3.writer=pipe[1]4.5.str=nil6.thread1=Thread.new(reader,writer)do|reader,writer|7.#writer.close_write8.str=reader.gets9.reader.close10.end11.12.thread2=Thread.new(reader,writer)do|reader,writer|13.#reader.close_read14.writer.puts("What hath God wrought?")15.writer.close16.end17.18.thread1.join19.thread2.join20.21.puts str#What hath God wrought?4使用非阻塞IOruby会在后台执行一些操作,使io不会被阻断,因此大部分情况下可以使用ruby 线程来管理IO,当一个线程被Io阻塞之后,另外的线程能够继续执行.由于ruby的线程不是一个native的线程,因此ruby的线程都在同一个进程里面.如果你想关闭一个非阻塞io,你可以这样做:Ruby代码1.require'io/nonblock'2.3.#...4.5.test=mysock.nonblock?#false6.7.mysock.nonblock=true#turn off blocking8.#...9.mysock.nonblock=false#turn on again10.11.mysock.nonblock{some_operation(mysock)}12.#Perform some_operation with nonblocking set to true13.14.mysock.nonblock(false){other_operation(mysock)}15.#Perform other_operation with non-blocking set to falseRuby代码1.require'io/nonblock'2.3.#...4.5.test=mysock.nonblock?#false6.7.mysock.nonblock=true#turn off blocking8.#...9.mysock.nonblock=false#turn on again10.11.mysock.nonblock{some_operation(mysock)}12.#Perform some_operation with nonblocking set to true13.14.mysock.nonblock(false){other_operation(mysock)}15.#Perform other_operation with non-blocking set to false5使用readpartialreadpartial被设计来用于就像socket这样的流.readpartial要求提供最大长度的参数,如果指定了buffer,那么这个buffer 应指向用于存储数据的一个字符串。

相关文档
最新文档