linux执行c程序时使用getopt获取传入的长参数,使用了--id 0x01 --addr 2 --write 1.1.1.1 --clear几个参数
时间: 2024-09-28 22:07:34 浏览: 33
linux-一个bash脚本旨在使用基本参数解析创建其他bash脚本
在Linux环境下,当你使用C程序通过`getopt`处理命令行参数,特别是长参数(即包含`--`的参数),你需要稍微调整一下代码来解析这些参数。假设你的C程序已经包含了对`getopt_long`的支持,你可以这样处理这些例子中的参数:
```c
#include <stdio.h>
#include <getopt.h>
#define HELP_OPT 'h'
#define ID_OPT 'i'
#define ADDR_OPT 'a'
#define WRITE_OPT 'w'
#define CLEAR_OPT 'c'
const char *long_options[] = { "help", "id=", "addr=", "write=", "clear=", 0 };
int parse_args(int argc, char *argv[]) {
int c;
int id = 0;
char *addr = NULL;
char *write_ip = NULL;
int clear_flag = 0;
int opt_index = 1; // Skip the first argument, which is usually the program name
while ((c = getopt_long(argc, argv, "hi:a:w:c:", long_options, &opt_index)) != -1) {
switch (c) {
case HELP_OPT:
// 显示帮助信息
break;
case ID_OPT:
if (optarg != NULL) {
id = atoi(optarg); // 转换成整数
} else {
printf("Error: No value provided for --id\n");
}
break;
case ADDR_OPT:
addr = optarg; // 参数直接作为字符串存储
break;
case WRITE_OPT:
write_ip = optarg; // 同样作为字符串存储
break;
case CLEAR_OPT:
clear_flag = 1; // 看到这个标志就设为1,默认为0
break;
// 如果参数不符合预期,可以添加错误检查和处理
default:
fprintf(stderr, "Invalid option: %c\n", c);
exit(EXIT_FAILURE);
}
}
// 对于剩余的非标志参数,例如地址可能是最后一个
if (optind < argc && !strcmp(argv[optind], "--")) {
// 通常在这里处理连续的非标志参数,比如IP地址
addr = argv[optind + 1]; // 把第二个参数当作地址
optind++; // 提前下标以便后续处理
}
// ...然后继续处理其他参数或者检查已收集的信息
return 0;
}
int main(int argc, char *argv[]) {
parse_args(argc, argv);
// 使用id、addr、write_ip和clear_flag变量处理参数内容
// ...
return 0;
}
```
在这个示例中,`parse_args`函数会解析并存储`--id`, `--addr`, `--write`, 和 `--clear`标志的值。对于`--id`,如果指定了值,则将其转换为整数;`--addr`和`--write`保留原始字符串形式;`--clear`仅设置标志位。
阅读全文