c - 解析参数数量不确定的命令行

标签 c core argv

我担心参数数量不确定时如何解析参数。

例如,我们可以考虑任何核心转储应用程序。

/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/

相关文章:

python - 如何在C中使用openssl解密密文?

C HTTP 服务器 - 多线程模型?

复制二进制文件 - C 编程中的源文件和目标文件

python - Argparse 仅在位置参数之前进行解析

c - 扫描字符然后在 IF 语句中使用它们? (如果 char= ='c' ){} 等

c - gcc -Wparentheses 对 b=1 发出警告; !a & b 但不是 !a & 1

c++ - 为什么我的 Redhat 服务器上的 QuickFIX 进程没有将它的核心文件写到它应该写的地方?

64-bit - 英特尔酷睿i5属于i686家族还是x86_64家族

c++ - 获取“段错误 : core dumped when trying to write string to setter

c - 指针的行为;字符 ** argv