C/C++ getopt optstring syntax
C/C++ getopt optstring syntax
使用C++中unistd.h中包含的getopt
函数,是否有一种方法可以构造optstring,使。。。
[-a] [-f "reg_expr"] out_file1 [[-f "reg_expr"] out_file2 ...]
是否可能?
这是一项家庭作业,但重点不是这个特定的子任务。
在我的脑海中,我想指定以下逻辑:
(一个自变量),(无限多个f自变量,其中有2个必需的(子)自变量),。。。(无限多个通用参数)
也许我对getopt
函数的理解存在根本缺陷。我还看到了一个getopt_long
。也许这就是我所缺少的。
我最初起草了这个,它很有效,但我遇到了getopt
函数,认为它可能会做得更好。
int outFileFlags;
int outFileMode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
int i = 1;
while (i < argc){
if (i == 1 && strcmp( argv[i], "-a") == 0){
cout << "append flag set" << endl;
outFileFlags = O_RDWR | O_APPEND;
i++;
continue;
}
else {
outFileFlags = O_TRUNC | O_RDWR | O_CREAT;
}
if (strcmp( argv[i], "-f") == 0 && i+2 <= argc){
cout << " regx = " << argv[i+1] << endl;
cout << " fn = " << argv[i+2] << endl;
i = i+3;
continue;
}
else {
cout << " regx = none" << endl;
cout << " fn = " << argv[i] << endl;
i++;
continue;
}
}
注意:假设这是为unix环境编写的。我认为我不能使用标准库中的任何内容。我只将std::cout包含在测试中。
我很乐意详细说明这次任务的任何细节。然而,主要问题围绕着optstring的语法。我目前只知道:含义是必需的和::含义是可选的有没有一种方法可以指定像regex通配符*一样重复的参数?
编辑:
我确信这是草率的,因为我不认为getopt是为每个选项处理多个参数而设计的,但它确实做到了。。。
int main(int argc, char *argv[]){
char c;
int iterations = 0;
while (*argv) {
optind = 1;
if (iterations == 0){
opterr = 0;
c = getopt(argc, argv, "a");
if(c == 'a'){
//~ APPEND SET
}
else if(c=='?'){
optind--;
}
}
while ((c = getopt(argc, argv, "f:")) != -1) {
if (c == 'f'){
//~ REGEX = optarg
if (optind < argc && strcmp(argv[optind], "-f") != 0) {
//~ FILENAME = argv[optind]
optind++;
}
else {
errno = 22;
perror("Error");
exit(errno);
}
}
else {
errno = 22;
perror("Error");
exit(errno);
}
}
argc -= optind;
argv += optind;
iterations++;
//~ REMAINING FILES = *argv
}
}
您需要为每组选项和输出文件名执行单独的getopt循环。
group_index = 0;
while (*argv) {
optreset = 1;
optind = 1;
while ((ch = getopt(argc, argv, "af:")) != -1) {
switch (ch) {
/* process options */
}
}
argc -= optind;
argv += optind;
outfile[group_index++] = *argv;
argc--;
argv++;
}
相关文章:
- 在 armhf 上使用 cmake 在 qt 上的编译问题 "Syntax error: wird unexpected (expecting " ) " "
- 接收"Error compiling: 0:1(1): error: syntax error, unexpected $end" C++、GLSL、着色器文件
- CMake target_link_options LINKER syntax
- 为什么"non-standard syntax; use '&' to create a pointer to member"在 CTOR 中使用线程?
- 函数参数中的向量"Non-standard syntax"错误
- 如何在 Eclipse 4.7.3a 中抑制"Syntax error"
- Unique_Ptrs Syntax {}
- C++ syntax with Nan::Utf8String
- Stroustrup Ex.7, Chap.4 - C++ Syntax
- Tensorflow Serving C++ Syntax
- 如果它被定义为 C++ 类中的成员函数,我得到了"non-standard syntax; use '&' to create a pointer to member"
- CMakelist - if(DEFINED) syntax
- Abaqus C++ API syntax
- C++ lambda syntax
- Visual Studio 2015:获取"non standard syntax, use '&' to create a pointer to member"错误
- C++ (int getopt(argc, (char **)argv, optstring)
- 需要帮助了解"{}-initializer syntax minimizes the chances for unfortunate conversions"
- C/C++ getopt optstring syntax
- ::std::regex_replace with syntax flag icase on Windows(VS201
- SWIG 不会扩展嵌套宏"Error: Syntax error in input(3)"