Linux 平台上getopt函数在Windos平台上的的实现算法
2009-09-09 12:44
459 查看
getopt.h文件代码:
#ifndef _GETOPT_
#define _GETOPT_
int getopt(int argc, char **argv, char *optstring);
extern char *optarg; // returned arg to go with this option
extern int optind; // index to next argv element to process
extern int opterr; // should error messages be printed?
extern int optopt; //
#define BADCH ('?')
#endif // _GETOPT
getopt.c文件代码:
/* got this off net.sources */
#include <stdio.h>
#include <string.h>
#include "getopt.h"
/*
* get option letter from argument vector
*/
int
opterr = 1, // should error messages be printed?
optind = 1, // index into parent argv vector
optopt; // character checked for validity
char
*optarg; // argument associated with option
#define EMSG ""
char *progname; // may also be defined elsewhere
static void
error(char *pch)
{
if (!opterr) {
return; // without printing
}
fprintf(stderr, "%s: %s: %c/n",
(NULL != progname) ? progname : "getopt", pch, optopt);
}
int
getopt(int argc, char **argv, char *ostr)
{
static char *place = EMSG; /* option letter processing */
register char *oli; /* option letter list index */
if (!*place) {
// update scanning pointer
if (optind >= argc || *(place = argv[optind]) != '-' || !*++place) {
return EOF;
}
if (*place == '-') {
// found "--"
++optind;
return EOF;
}
}
/* option letter okay? */
if ((optopt = (int)*place++) == (int)':'
|| !(oli = strchr(ostr, optopt))) {
if (!*place) {
++optind;
}
error("illegal option");
return BADCH;
}
if (*++oli != ':') {
/* don't need argument */
optarg = NULL;
if (!*place)
++optind;
} else {
/* need an argument */
if (*place) {
optarg = place; /* no white space */
} else if (argc <= ++optind) {
/* no arg */
place = EMSG;
error("option requires an argument");
return BADCH;
} else {
optarg = argv[optind]; /* white space */
}
place = EMSG;
++optind;
}
return optopt; // return option letter
}
#ifndef _GETOPT_
#define _GETOPT_
int getopt(int argc, char **argv, char *optstring);
extern char *optarg; // returned arg to go with this option
extern int optind; // index to next argv element to process
extern int opterr; // should error messages be printed?
extern int optopt; //
#define BADCH ('?')
#endif // _GETOPT
getopt.c文件代码:
/* got this off net.sources */
#include <stdio.h>
#include <string.h>
#include "getopt.h"
/*
* get option letter from argument vector
*/
int
opterr = 1, // should error messages be printed?
optind = 1, // index into parent argv vector
optopt; // character checked for validity
char
*optarg; // argument associated with option
#define EMSG ""
char *progname; // may also be defined elsewhere
static void
error(char *pch)
{
if (!opterr) {
return; // without printing
}
fprintf(stderr, "%s: %s: %c/n",
(NULL != progname) ? progname : "getopt", pch, optopt);
}
int
getopt(int argc, char **argv, char *ostr)
{
static char *place = EMSG; /* option letter processing */
register char *oli; /* option letter list index */
if (!*place) {
// update scanning pointer
if (optind >= argc || *(place = argv[optind]) != '-' || !*++place) {
return EOF;
}
if (*place == '-') {
// found "--"
++optind;
return EOF;
}
}
/* option letter okay? */
if ((optopt = (int)*place++) == (int)':'
|| !(oli = strchr(ostr, optopt))) {
if (!*place) {
++optind;
}
error("illegal option");
return BADCH;
}
if (*++oli != ':') {
/* don't need argument */
optarg = NULL;
if (!*place)
++optind;
} else {
/* need an argument */
if (*place) {
optarg = place; /* no white space */
} else if (argc <= ++optind) {
/* no arg */
place = EMSG;
error("option requires an argument");
return BADCH;
} else {
optarg = argv[optind]; /* white space */
}
place = EMSG;
++optind;
}
return optopt; // return option letter
}
相关文章推荐
- windows 上的 _splitpath 函数在 linux 平台下的简单实现
- 数据结构——算法之(012)( linux C 所有字符串操作函数实现)
- 熟练使用语言在Linux平台实现具体的算法和数据结构
- ZYNQ XC7Z030平台Linux+裸机AMP实现(官方文档1078、1079)
- Linux平台用C++实现信号量,同步线程
- 采用LBP算法在安霸A2S70平台上实现身份识别
- Linux中的system函数的实现和解释
- Linux中的system函数的实现和解释
- 整型数组处理算法(十一)请实现一个函数:线段重叠(性能优化)。[风林火山]
- Linux下实现应用层串口库函数
- Leetcode平台上的Median of Two Sorted Arrays题目用Java堆算法实现
- linux 函数实现ls -l命令
- 利用Linux系统函数实现线程池(C++)
- Linux下获取系统当前时间函数实现
- Linux平台搭建Jenkins+Maven+Shell实现自动化构建部署
- Linux平台双网卡绑定技术实现负载均衡(网卡聚合)bonding
- Linux c 下使用getopt()函数
- Linux平台下setsid()函数
- Linux编程里getopt_long_only函数用法详解
- Linux中定时器的算法实现