centos Getopt无法识别命令行参数(C程序)

weylhg0b  于 2022-11-07  发布在  其他
关注(0)|答案(2)|浏览(193)

我正在CentOS linux中创建一个C程序,我无法让getopt识别命令行中的参数。
我得到的错误是“未找到命令”我使用gcc编译文件并使用./testFile执行编译命令是:gcc mathwait.c -o测试文件,然后是./测试文件
谢谢你的帮助!

void help()
{
 printf("The options for this program are:\n ");
 printf("-h - walkthrough of options and program intent\n ");
 printf("This program forks off a single child process to do a task\n ");
 printf("The main process will wait for it to complete and then do\n");
 printf("some additional work\n");
}

int main(int argc, char**argv)
{
 int option;
 while((option = getopt(argc, argv, "h")) != -1)
{
  switch(option)
 {
  case 'h':
   help();
  break;
  default:
   help();
  break;
 }
}
}
ftf50wuq

ftf50wuq1#

1.缺少两个头文件:


# include <stdio.h>

# include <unistd.h>

并且缺少一个return语句:

return 0;
  1. Per getopt(3)手册页:
    如果没有更多的选项字符,getopt()将返回-1
    这意味着如果你不提供任何参数,getopt()将返回-1,你的while()循环将不会被执行,你的程序将退出。如果你用-h调用你的程序,第一个case将被执行,否则(意味着任何其他参数)default将被执行。
    1.我假设这是测试代码,否则当您在所有情况下都做同样的事情时,没有必要使用开关。
    1.格式对于可读性很重要:

# include <stdio.h>

# include <unistd.h>

void help() {
    printf(
        "The options for this program are:\n"
        "-h - walkthrough of options and program intent\n"
        "This program forks off a single child process to do a task\n"
        "The main process will wait for it to complete and then do\n"
        "some additional work\n"
    );
}

int main(int argc, char**argv) {
    int option;
    while((option = getopt(argc, argv, "h")) != -1) {
        switch(option) {
            case 'h':
                help();
                break;
            default:
                help();
                break;
        }
    }
    return 0;
}
ulydmbyx

ulydmbyx2#

你说:
编译命令为:gcc mathwait.c -o testFile,然后是./testFile
如果运行./testFile,则未提供任何参数。运行:

./testFile -h

现在你提供了一个getopt()要处理的选项。如果你运行./testFile -x,你会得到一个关于无法识别的'x'选项的消息,然后是来自help()函数的信息。

相关问题