我担心参数数量不确定时如何解析参数。
例如,我们可以考虑任何核心转储应用程序。
在 /proc/sys/kernel/core_pattern
中注册应用程序(例如:store_dump
)时,每当本地应用程序调用 store_dump
应用程序崩溃发生。我们可以在注册期间就我们希望收到的参数提供各种选项。
我的选项是 - %p %e %s
即 (pid, 可执行文件名(线程名), 信号号)
所以我打算将参数解读为
argv[1] -> pid
argv[2] -> thread name
argv[3] -> signal number
这很好,除非我在线程名称中有空格。如果 thread name
包含空格,它将被分成两个参数,如下所示。
argv[1] -> pid
argv[2] -> thread name (first part)
argv[3] -> thread name (second part)
argv[4] -> signal number
那么我应该如何编写适当的逻辑来解析这些参数呢?我不能总是将 argv[3] 硬编码为信号编号。有通用的方法吗?
我看到的一个选项是最后保留线程名称。但我觉得应该有比这更好的解决方案。
有人可以建议吗。
最佳答案
选项 1:将您的核心模式更改为 %p %s %e
。由于 %e
是唯一可以用空格替换的东西,您可以简单地将 all 视为尾随参数(即 argv[i]
i > 2
)组成线程名。
选项 2:如果您有多个可以用空格替换的说明符(例如 %e
或 %h
的重复实例),您可以设置添加魔术分隔符到您希望永远不会作为线程名称的一部分出现的参数,然后在迭代参数时查找这些参数:
|store_dump MAGIC1 %p MAGIC2 %e MAGIC3
这两个选项都不是完美的,因为线程名称中的任何空格都被规范化了,因此您无法准确地重建实际名称。例如,您无法区分仅在嵌入的空白运行时长不同的线程。
关于c - 解析参数数量不确定的命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27007076/