Linux glib命令行解析GOptionEntry使用
2023-09-14 09:09:56 时间
1.安装glib
//安装依赖库
sudo apt-get install libffi-dev -y
//安装glib
# sudo apt-get install libglib2.0-dev -y
//64位ubuntu安装32位glib2.0, 仅作参考
# sudo apt-get install libglib2.0-dev:i386
2.test.c
#include <glib.h>
#include <locale.h>
#define ERR_MSG_V(msg, ...) \
g_print("** ERROR: <%s:%d>: " msg "\n", __func__, __LINE__, ##__VA_ARGS__)
static gint repeats = 2;
static gint max_size = 8;
static gboolean verbose = FALSE;
static gboolean beep = FALSE;
static gboolean op_rand = FALSE;
static gchar arg_data[32] = { "arg data" };
static GOptionEntry entries[] =
{
{"long name" , 's' /*short-name*/ , 0 /*flags*/ , G_OPTION_ARG_STRING /*arg*/ ,
arg_data, "description" , "arg_description" },
{"repeats" , 'r' , 0, G_OPTION_ARG_INT, &repeats, "Average over N repetitions" , "N" },
{"max-size" , 'm' , 0, G_OPTION_ARG_INT, &max_size, "Test up to 2^M items" , "M" },
{"verbose" , 'v' , 0, G_OPTION_ARG_NONE, &verbose, "Be verbose" , NULL},
{"beep" , 'b' , 0, G_OPTION_ARG_NONE, &beep, "Beep when done" , NULL},
{"rand" , 0, 0, G_OPTION_ARG_NONE, &op_rand, "Randomize the data" , NULL},
{NULL}
};
int main (int argc, char *argv[])
{
GError *error = NULL;
GOptionContext *context = NULL;
GOptionGroup *group = NULL;
// 创建一个新的选项上下文
context = g_option_context_new("- test tree model performance" );
#if 1
// 如果主要组不存在则创建主要组,向组添加entries并设置转换域
g_option_context_add_main_entries(context, entries, NULL);
//添加要在选项列表之前的--help输出中显示的字符串。 这通常是程序功能的摘要
g_option_context_set_summary(context, "This is a glib demo" );
#else
group = g_option_group_new ("abc", NULL, NULL, NULL, NULL);
g_option_group_add_entries (group, entries);
g_option_context_set_main_group (context, group);
// g_option_context_add_group(context, gtk_get_option_group(TRUE));
#endif
// 解析命令行参数,识别已添加到上下文的选项
if (!g_option_context_parse(context, &argc, &argv, &error))
{
ERR_MSG_V("%s", error->message);
exit (1);
}
// 释放被解析的参数
g_option_context_free(context);
g_print("Now value is: repeats=%d, max_size=%d, verbose=%d, beep=%d\n",
repeats, max_size, verbose, beep);
return 0;
}
3.编译
# gcc test.c -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include \
-L/usr/lib/x86_64-linux-gnu -lglib-2.0 -o test
4.run测试
# ./test -h
Usage:
test [OPTION?] - test tree model performance
This is a glib demo
Help Options:
-h, --help Show help options
Application Options:
-s, --long name=arg_description description
-r, --repeats=N Average over N repetitions
-m, --max-size=M Test up to 2^M items
-v, --verbose Be verbose
-b, --beep Beep when done
--rand Randomize the data
# ./test -r 66 -m 6
Now value is: repeats=66, max_size=6, verbose=0, beep=0
5.GOptionEntry结构体定义:
typedef struct GOptionEntry {
const gchar *long_name; // 参数的完整名
gchar short_name; // 简写名
gint flags; // 参数选项标准,如果不关心可直接赋0
GOptionArg arg; // 参数类型,int,string...
gpointer arg_data; // 默 认参数值
const gchar *description; // 参数意义说明
const gchar *arg_description; // 参数占位符说明
}GOptionEntry;
相关文章
- 部署linux网络安装服务器
- 联想服务器Linux:实现数据处理的最佳伙伴(联想服务器linux)
- Linux命令行:掌握sh的秘密(linux命令sh)
- 使用SSH连接远程Linux服务器并上传文件(ssh上传文件到linux服务器上)
- Linux查看挂起进程:深入解析(linux查看挂起进程)
- 深入Linux:进入命令行模式(linux进入命令行模式)
- Linux实现更有效的进程调度策略(linux的调度策略)
- 深入理解Linux服务器编码修改(修改linux服务器编码)
- 初步探索Linux命令行之旅(进入linux命令行)
- 强大的Linux系统默认分区配置方式(linux默认的分区是)
- 管理用Linux进行MySQL远程管理(linux远程mysql)
- 管理Linux系统的su命令(linux的su命令)
- Linux 文件查找功能的简单指南(文件查找linux)
- Linux如何快速修改IP地址(linux修改ip地址)
- Linux的分支:分享开源精神(linux的分支)
- 版本Linux的分支版本:新时代的开启(linux的分支)
- 实现u盘启动:使用Linux制作u盘(制作u盘linux)
- 参数Linux命令行参数解析:从args开始(linuxargs)
- Linux终端快速复制:掌握这些快捷键,轻松提高效率(linux终端复制快捷键)
- 解析Linux中/usr目录的作用与结构(linux中usr目录)
- 挑战如何!Linux——强悍不容易学习(linux好难学)
- 行Linux命令行之旅:探索自动化的新世界(linux并且命令)
- Linux命令行之旅:从行首开始(linux命令行行首)
- Linux进程之间的相互关系(linux进程关系)
- 深入解析Linux的配置文件(linux配置文件详解)
- 轻松搭建高效代理服务器使用Linux系统(linux搭建代理服务器)
- 深度解析: Linux 进程堆栈信息如何管理与调试!(linux进程堆栈信息)
- 清晰 Linux 命令行:清屏快捷方式(linux命令行清屏)
- Linux下的办公新体验:从命令行到界面(linux下工作)
- 行界面入门指南:Linux命令行界面使用(怎么进入linux命令)
- Linux无法解析PHP文件,如何解决(linux 不解析php)
- 招聘Linux嵌入式工程师,实现技术创新!(linux嵌入式工程师招聘)
- Linux命令行下的卸载操作简易教程(linux卸载命令行)
- Linux内存使用分析:妙用命令行工具(查linux内存使用情况)