小编And*_*imm的帖子

通过/ proc/mounts监视安装点更改

根据proc手册,可以通过打开"/ proc/mounts"监视linux系统中的挂载点更改,并添加文件描述符以读fd_setselect()调用.

以下代码适用于Ubuntu 9.04,而不适用于Ubuntu 10.04(2.6.32 linux内核):

int mfd = open("/proc/mounts", O_RDONLY, 0);

fd_set rfds;
struct timeval tv;
int rv;

FD_ZERO(&rfds);
FD_SET(mfd, &rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;

int changes = 0;
while ((rv = select(mfd+1, &rfds, NULL, NULL, &tv)) >= 0) {
    if (FD_ISSET(mfd, &rfds)) {
        fprintf(stdout, "Mount points changed. %d.\n", changes++);
    }

    FD_ZERO(&rfds);
    FD_SET(mfd, &rfds);
    tv.tv_sec = 5;
    tv.tv_usec = 0;

    if (changes > 10) {
        exit(EXIT_FAILURE);
    }
}
Run Code Online (Sandbox Code Playgroud)

可编辑的代码段.

文件描述符总是在一台机器上可读,因此它会在select调用中不断弹出.即使坐骑没有变化.

我在这里错过了什么吗?

在此先感谢您的帮助!

男人5 …

c linux filesystems mount procfs

10
推荐指数
1
解决办法
5886
查看次数

如何在rails中创建对象数组?

我需要知道如何在rails中创建对象数组以及如何在其中添加元素.

我是铁杆上的红宝石新手,这可能是某种愚蠢的问题,但我无法找到确切的答案.那么请对此提出一些专家意见

ruby arrays ruby-on-rails

10
推荐指数
2
解决办法
4万
查看次数

从数组中检索x个随机元素

我正在努力编写一个干净的方法,当传递一个字符串数组时,x返回一个总共x的数组元素的随机列表,例如.

def getrandomarrayelements(thearray, howmany)
    return [something]
end
Run Code Online (Sandbox Code Playgroud)

是的,我应该提交我现有的代码,虽然工作效果不好,但它有8行长,我觉得可以在一个代码中完成?!

ruby arrays ruby-on-rails

10
推荐指数
1
解决办法
4160
查看次数

是否可以在类中反转包含的模块?

您可以在类中包含模块,以便在将类方法和实例方法添加到该特定类的方面扩展类功能.

module M
 def self.class_method_from_module
  'from class_method_from_module'
 end

 def instance_method_from_module
  'from instance_method_from_module'
 end
end

class C
 include M

 def self.class_method
  'from class_method'
 end

 def instance_method
  'from instance_method'
 end
end

puts C.class_method => 'from class_method'

puts C.class_method_from_module => 'from class_method_from_module'

puts C.new.instance_method => 'from instance_method'

puts C.new.instance_method_from_module => 'instance_method_from_module'
Run Code Online (Sandbox Code Playgroud)

现在,即使从内存中删除模块M,仍然具有以下内容:

Object.send(:remove_const, :M) #remove the module M

puts C.class_method_from_module => 'from class_method_from_module'

puts C.new.instance_method_from_module => 'instance_method_from_module'
Run Code Online (Sandbox Code Playgroud)

而不是方法丢失.这是为什么?删除模块添加到类的功能的最佳方法是什么?

ruby ruby-on-rails

9
推荐指数
2
解决办法
4783
查看次数

ruby中的线程安全外部进程,以及检查exitstatus

我想在Ruby中运行一个线程安全的脚本来调用外部程序,然后检查该外部程序的退出状态.最好的方法是什么?到目前为止,我一直在检查$?,但我认为我正在与该计划的其他部分达成竞争条件.

这是一些示例代码:

Thread.new do
  `external_program`
  if $?.exitstatus == 0
    # it worked.
  else
    # it didn't work.
  end
end
Run Code Online (Sandbox Code Playgroud)

理想情况下,我会做类似的事情

Process.new(`external_program`).exitstatus
Run Code Online (Sandbox Code Playgroud)

所以它与这个过程exitstatus密不可分,而不是最后一个完成的过程.有没有办法做到这一点?

ruby thread-safety

9
推荐指数
1
解决办法
1559
查看次数

在Ruby中解析文件时跳过行的最快方法?

我试着寻找这个,但找不到多少.这似乎是之前可能会被问到的事情(很多次?),所以我很抱歉,如果是这样的话.

我想知道在Ruby中解析文件某些部分的最快方法是什么.例如,假设我知道我想要的特定功能的信息是在1000行文件的第500行和第600行之间.(显然这类问题适用于大型文件,我只是为了举例而使用那些较小的数字),因为我知道它不会出现在上半部分,是否有一种忽略这些信息的快速方法?

目前我正在使用以下内容:

while  buffer = file_in.gets and file_in.lineno <600
  next unless file_in.lineno > 500
  if buffer.chomp!.include? some_string
    do_func_whatever
  end
end
Run Code Online (Sandbox Code Playgroud)

它有效,但我不禁认为它可以更好地工作.

我对Ruby很陌生,并且有兴趣学习新的工作方式.

ruby lines fileparsing

9
推荐指数
1
解决办法
5720
查看次数

找不到RVM包

我刚刚安装了rvm然后是bundler gem.

?  ~  ruby -v
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin10.7.0]
?  ~  gem list|grep bundler
bundler (1.0.12)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行bundle命令时,我收到以下错误:

?  ~  which bundle
bundle not found
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我在前面添加"rvm ruby​​",它就有效

?  ~  rvm ruby bundle
Run Code Online (Sandbox Code Playgroud)

不过,我不认为我应该在任何命令之前加上rvm ruby​​.这种行为是否正确?

编辑:显然问题是shell之间没有记住默认配置.

如果我键入"rvm 1.8.7 --default"然后它可以工作,但是一旦我打开一个新的shell,它就不会.

ruby rvm

9
推荐指数
2
解决办法
1万
查看次数

在Ruby中访问类中的模块类变量

我有一个带有类变量的模块

module Abc
  @@variable = "huhu"

  def self.get_variable
    @@variable
  end

  class Hello
    def hola
      puts Abc.get_variable
    end
  end
end

a = Abc::Hello.new
a.hola
Run Code Online (Sandbox Code Playgroud)

是否可以不使用方法进入@@variable内部?我的意思是说会很好.只是好奇.Helloget_variableAbc.variable

ruby accessor class-variables

9
推荐指数
1
解决办法
3438
查看次数

适当的Assert_Raise单元测试和异常类的使用

我正在练习练习49学习Ruby的艰辛之路

练习要求为所提供的每个功能编写单元测试.我正在测试的一个项目是,是否引发了适当的异常.建议我们assert_raise为此目的使用.

这是我正在测试的代码:

class ParserError < Exception

end

Pair = Struct.new(:token, :word)

def peek(word_list)
    begin
        word_list.first.token
    rescue
        nil
    end 
end

def match(word_list, expecting)
    word = word_list.shift
    if word.token == expecting
        word
    else
        nil
    end
end

def skip_word(word_list, token)
    while peek(word_list) == token
        match(word_list, token)
    end
end

def parse_verb(word_list)
    skip_word(word_list, :stop)

    if peek(word_list) == :verb
        return match(word_list, :verb)
    else
        raise ParserError.new("Expected a verb next.")
    end
end
Run Code Online (Sandbox Code Playgroud)

这是测试,对于函数parse_verb:

def test_parse_verb
    list_one = [Pair.new(:verb, 'go'), Pair.new(:noun, 'king')]
    assert_equal(parse_verb(list_one), Pair.new(:verb, 'go')) …
Run Code Online (Sandbox Code Playgroud)

ruby unit-testing assert assertraises learn-ruby-the-hard-way

9
推荐指数
1
解决办法
1万
查看次数

在JRuby中,我如何确定导致java.lang.ThreadDeath的原因?

在运行与JRuby中的临时文件交互的某些代码的单元测试时,我有时会得到以下结果:

Exception: java.lang.ThreadDeath thrown from the UncaughtExceptionHandler in thread "Thread-6395"
Run Code Online (Sandbox Code Playgroud)

它似乎没有引起任何问题,但是发生了什么,我怎样才能确定它发生的位置?我尝试打开-d,但这并没有给我一个例外的堆栈跟踪.

ruby debugging jruby

9
推荐指数
1
解决办法
1705
查看次数