2016-12-02 101 views
0

我可以利用创建本地插座:如何使用Scala检查文件是否是Unix套接字?

$ python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/mnt/somesocket')" 

我可以检查该文件是通过以下在命令行插座:

$ test foo.txt 
$ echo $? 
1 
$ test -S somesocket 
$ echo $? 
0 

如何检查文件是否一个使用Scala的套接字?

回答

1

有多种可供选择,但没有一个是完美的......

test将调用S_ISSOCK宏,你可以从code here看到:

struct stat stat_buf; 
... 
S_ISSOCK (stat_buf.st_mode) 

宏本身是非常简单 - 只要检查如果某些位通过位掩码设置。从here相关代码:

#define S_IFMT 00170000 
... 
#define S_IFSOCK 0140000 
... 
#define S_ISSOCK(m)  (((m) & S_IFMT) == S_IFSOCK) 

因此,如果你将有一个structurest_mode价值stat你会重新设定。然而,这部分是棘手的。

Java NIO通过FilesBasicFileAttributes类提供了一些POSIX支持。但它不公开文件模式或套接字的任何测试方法。 如果不使用多种类型的文件,你可能会使用isOther是确定:

布尔isOther()

判断文件是否比一个普通文件,目录 ,或符号链接以外的东西。

否则,你可以尝试JNI/JNA实现:

https://github.com/SerCeMan/jnr-fuse/blob/master/src/main/java/ru/serce/jnrfuse/struct/FileStat.java

Is there a Java library of Unix functions?

最后,最简单但最慢的解决方法是调用从斯卡拉过程(壳)。

相关问题