在一些底层的系统中,一定都是采用C作为开发语言,而且底层与UI进行交互,一般都会采用CLI来实现,CLI(Command Line Interface)也就是命令行接口。一定来说都是通过它来提供接口给UI或者一些高级用法。
熟悉PERL或者其他一些脚本的人都知道,CLI实现起来是非常简单,想PERL就是采用GEOPT来实现的。同样在C语言里面也是很简单的。
下面我来详细介绍下getopt_long的用户。
首先讲下它所涉及的数据结构:
他的结构定义都在getopt.h这个结构体中,下面这个option是一个非常重要的结构体,它用于存储命令的参数以及缩写。
struct option
{
const char *name;
/* has_arg can't be an enum because some compilers complain about
type mismatches in all the code that assumes it is an int. */
int has_arg;
int *flag;
int val;
};
这个结构体是用于存储命令参数的,第一参数NAME就是我们参数的名字,第二个参数就是表示这个参数是否有参数值,最后一个val就是缩写。
我们来举个最简单的例子
struct option longopts[] =
{
/* { name has_arg *flag val } */
{"login_user", 1, 0, 'U'},
{"methodname", 0, 0, 'M'},
}
这个例子就定义了两个参数,第一个login_user第二个位methodname,而他们的缩写分别为U,和M 而且他们都是参数值的。
同时我们还需要定义一个char的字符指针
例如上面的例子我们就需要这样定义 char *shortopts = "U:M";
这个指针指向了这些参数的缩写,如果它后面有冒号的话就表明它是带参数值的参数。反之则反。
上面我简述了下他的数据结构,下面它的一个重要函数出场了,它就是getopt_long
extern int getopt_long (int ___argc, char *const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind)
他第一个参数就是参数的个数
也就是我们C语言中int main(int argc,char ** argv) 这里的argc 第二个参数就是这里的**argv 一个指向指针的指针,存放着各种命令参数。
第三个就是我们定义的 shortopts 第四个是我们的longopts
它每执行一次获取一个参数,并且会返回参数名的缩写对于的值,下面我来举个简单的例子
while((c=getopt_long(argc,argv,shortopts,longopts,0))
!=EOF)
{
switch(c)
{
case 'M':
这里就把我们输入的参数值获取过来。
}
}
这里我们需要将一下一个全局变量 *optarg,它指向我们存放的参数值。
在case中我们需要将我们输入的参数值获取过来。
这样一来我们就可以轻松完成我们的CLI。
分享到:
相关推荐
### C语言查询DB2数据库开发知识点 #### 一、DB2数据库查询开发流程 1. **创建SQC文件** - 创建一个后缀名为 `.sqc` 的文件,并在此文件中编写 C 语言代码和 SQL 代码。 - 示例代码: ```c #include #include...
微控制器的命令行界面 灵活的终端设置使您可以毫不费力地...程序存储器中所需的空间,最小工作配置约为 10 KB 安装 使用终端所需的一切,将所有源复制到共享文件夹: 更多详情、使用方法,请下载后阅读README.md文件
cReddit 使用C语言编写的CLI Reddit客户端。哦,也是跨平台的!如何建造当前所需的库是libcurl和libncursesw(libncurses的宽字符版本)。 该项目本身包括一个名为libreddit的库和一个名为creddit的程序。 要进行...
wpa_supplicant 提供了一个库,wpa_cli 就是通过调用这个库中的函数来实现其功能的。源码中的关键部分主要包括命令解析、事件处理和与 wpa_supplicant 的通信。 1. **命令解析**:wpa_cli 的主要任务之一是解析用户...
8. **编译和调试**:了解如何在Linux/Unix环境下使用gcc编译器编译和链接源代码,以及使用gdb进行调试,是开发过程中的必备技能。 通过对这些知识点的学习和实践,开发者不仅可以掌握聊天程序的实现,还能深入理解...
在C#中调用C语言代码,主要是通过.NET框架中的P/Invoke(Platform Invoke)技术实现的。P/Invoke允许托管代码(C#)调用非托管代码...在实际开发中,确保正确地处理各种边界情况和错误,以确保程序的稳定性和可靠性。
通过深入研究 `wpa_supplicant-0.6.9` 的源码,我们可以更好地理解无线网络安全的实现细节,同时也能提高在相关领域的问题诊断和开发能力。虽然版本较旧,但其基本原理和设计思路对于理解现代 Wi-Fi 安全仍然是至关...
虽然C语言本身并不支持图形用户界面(GUI),但可以通过标准输入输出(stdio)或命令行接口(CLI)为用户提供交互方式。更进一步,可以结合其他库,如ncurses,来创建简单的文本界面。 总结来说,“图书馆管理系统...
Visual C++ 2008是Microsoft发布的另一款集成开发环境,它支持C/C++/CLI等多种编程语言。与Visual C++ 6.0相比,Visual C++ 2008提供了更多现代特性支持。 #### 16. C语言的函数 函数是C语言程序的基本组成部分之一...
在Linux操作系统中,使用C语言开发游戏是一种常见的实践,它能提供高效且灵活的编程环境。本项目"Linux下基于C语言开发的俄罗斯方块游戏"是一个很好的实例,展示了C语言在游戏编程中的应用。下面将详细介绍这个项目...
在IT行业中,CLI(命令行接口)开发是构建软件工具和服务的一种常见方法,尤其是在系统级编程和网络通信中。本文将深入探讨Linux环境下的套接字网络编程,以实现客户端和服务器之间的通信。我们将主要关注"cli.c"这...
glib是一个基础库,提供了许多通用的C语言编程工具,如数据结构、线程管理、内存管理等,对于开发CLI工具至关重要。在大多数Linux发行版中,可以使用包管理器(如apt-get或yum)轻松安装glib-2.0。 接下来,让我们...
【C语言版图书管理系统】是基于C语言编程技术开发的一款应用程序,主要目的是为了学习和实践C语言的基础知识以及软件工程中的基本功能实现。这个系统涵盖了登录、查询、插入和删除等核心操作,对于初学者来说,是...
在IT领域,C语言是一种非常基础且强大的编程语言,它被广泛用于系统编程、软件开发、设备驱动编写等。这个“c语言做的一个任务管理器”项目,显然是使用C语言来实现的一个类似操作系统中的任务管理器功能的程序。...
4. **显示**:在CLI中,我们需要将当前的棋盘状态以人类可读的形式输出。这可能涉及打印数组元素,并使用特殊字符或颜色来区分不同的数字。 5. **结束条件**:游戏结束的判断标准是棋盘满且无法进行任何有效移动。...
6. **用户界面(CLI)**:作为命令行界面的应用,C语言订票系统可能会使用`scanf()`或`fgets()`等函数接收用户输入,并通过`printf()`输出信息。 7. **错误处理**:任何系统都应具备良好的错误处理机制,C语言通过`...
在IT行业中,C语言是一种基础且强大的编程语言,尤其适合于系统级编程和嵌入式系统。本项目“C开发 C语言学生管理系统”是利用C语言实现的一个实用系统,旨在帮助用户管理和处理学生数据。下面将详细介绍这个系统的...
在C语言中开发这样一个系统,可以锻炼程序员对数据结构、文件操作和命令行交互的理解。它可能包括以下功能: 1. **数据结构**:程序可能会使用数组、链表或结构体来存储学生信息,如姓名、学号、年龄和成绩。结构体...
在通讯录程序中,用户可能会通过命令行界面(CLI)输入各种指令,如添加新联系人、删除联系人或搜索特定联系人。 4. 字符串处理: 在处理联系人信息时,字符串操作至关重要。C语言中的字符串是字符数组,可以使用...
在信息技术领域,C语言因其高效、灵活和强大的底层控制能力,常被用于开发各种系统软件,包括银行管理系统。本文将深入探讨基于C语言的银行管理系统的实现及其核心知识点。 首先,银行管理系统是用于处理银行日常...