我可以利用创建本地插座:如何使用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的套接字?
我可以利用创建本地插座:如何使用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的套接字?
有多种可供选择,但没有一个是完美的......
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)
因此,如果你将有一个structure与st_mode
价值stat
你会重新设定。然而,这部分是棘手的。
Java NIO通过Files和BasicFileAttributes类提供了一些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?
最后,最简单但最慢的解决方法是调用从斯卡拉过程(壳)。