2014-07-02 55 views
2

我想弄清楚是否存在套接字文件測試本地套接字文件是否存在(即/tmp/mysql.sock)?

IRB

2.1.2 :001 > require 'socket' 
=> true 
2.1.2 :002 > File.file? '/tmp/mysql.sock' 
=> false 
2.1.2 :003 > Socket.unix '/tmp/mysql.sock' 
=> #<Socket:fd 9> 

正如你可以看到,該套接字文件不是常規文件,爲此紅寶石返回false。

任何其他方式(然後使用Socket.unix)檢查套接字文件是否存在?

回答

2

你只需要使用File.socket?方法:

File.file?('/var/run/mysqld/mysqld.sock') 
# => false 

File.socket?('/var/run/mysqld/mysqld.sock') 
# => true 

或者您可以使用Pathname類:

Pathname.new('/var/run/mysqld/mysqld.sock').socket? 
# => true 
+0

該死的,這很容易(從未檢查API),讓我感到很蠢,謝謝! – Roger

0

有一個通用File.exist?方法,檢查是否有任何類型的文件系統條目(目錄,文件,符號鏈接,琴頭,設備,無論...)在指定的路徑。

您可以使用它像這樣:

File.exist?('/var/run/mysqld/mysqld.sock') 
# => true 

如果你不關心的文件存在的類型,這通常是最好的辦法。