0

我正在尝试解析cat /proc/mounts在 Linux 环境中运行的结果。

当安装包含特殊字符(例如空格)时,它们会被转义。这方面的一个例子是

/home/user/media\040/image.dd /media/dd ... 其中 \040 实际上是一个空格。

我正在尝试在 java 中解析它,但不想编写手动解析器,因为我必须相信这已经完成并且比我做得更稳健。有没有负责解码的类?我找到了一两个八进制解码器,但它们不适用于混合文本和八进制。

4

2 回答 2

2

您可以在 C 中使用 getmntent 解析 /proc/mounts。

您可以根据规则在Java中实现它:

空格 (\040)、制表符 (\011)、换行符 (\012) 和反斜杠 (\134)

或 none 表示交换分区。

男人getmntent:

mntent结构定义如下:

       struct mntent {
           char *mnt_fsname;   /* name of mounted file system */
           char *mnt_dir;      /* file system path prefix */
           char *mnt_type;     /* mount type (see mntent.h) */
           char *mnt_opts;     /* mount options (see mntent.h) */
           int   mnt_freq;     /* dump frequency in days */
           int   mnt_passno;   /* pass number on parallel fsck */
       };

   Since  fields  in  the mtab and fstab files are separated by whitespace, octal escapes are
   used to represent the four characters space (\040), tab (\011), newline (\012)  and  back-
   slash  (\134) in those files when they occur in one of the four strings in a mntent struc-
   ture.  The routines addmntent() and getmntent() will convert from string representation to
   escaped representation and back.

另一种方式:直接解析“mount”的结果。用“on”、“type”等来分割它们可能更简单。

于 2012-11-27T02:45:18.953 回答
1

我最终使用了 Apache Commons Lang。

http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html#unescapeJava(java.lang.String)

这似乎使一切都变得正确。

于 2013-05-17T13:19:43.540 回答