Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Getopt-filename作为参数_C_Unix - Fatal编程技术网

C Getopt-filename作为参数

C Getopt-filename作为参数,c,unix,C,Unix,比如说我做了一个C程序,叫做: ./something -d dopt filename 所以-d是一个命令,dopt是-d的可选参数,filename是/something的参数,因为我也可以调用/something filename 获取文件名的getopt表单是什么?使用optstring“d:” 用optarg以常规方式捕获-d dopt。然后查看optind(将其与argc进行比较),它告诉您是否还剩下任何非选项参数。如果是这样,那么您的文件名就是其中的第一个 getopt没有明确告

比如说我做了一个C程序,叫做:

./something -d dopt filename
所以
-d
是一个命令,
dopt
-d
的可选参数,
filename
/something
的参数,因为我也可以调用
/something filename

获取文件名的
getopt
表单是什么?

使用optstring
“d:”

optarg
以常规方式捕获
-d dopt
。然后查看
optind
(将其与
argc
进行比较),它告诉您是否还剩下任何非选项参数。如果是这样,那么您的文件名就是其中的第一个

getopt
没有明确告诉您非选项参数是什么或检查数字。它只是告诉您它们从哪里开始(如果您处于GNU的非严格POSIX模式,那么首先将它们移动到参数数组的末尾)

查看如何操作。在
main()
的末尾,您会发现:

if (optind < argc)
{
    do
    {
        char *file = argv[optind];
        // do something with file
    }
    while ( ++optind < argc);
}
if(optind

optind
是getopt找到的命令行选项数。因此,此条件/循环构造可以处理用户列出的所有文件。

在本例中,没有一个文件
getopt
获取选项,在本例中,
filename
不是选项(您显示的两个命令调用都需要选项)。