gpt4 book ai didi

c - 在 C 中融合解析自定义参数

转载 作者:太空宇宙 更新时间:2023-11-03 23:44:25 25 4
gpt4 key购买 nike

在我的 c 项目中使用 libfuse,我尝试添加自定义命令行参数并处理它们。

这是我依赖的一个例子

https://github.com/libfuse/libfuse/wiki/Option-Parsing

首先,我尝试为挂载点配置做论证-с <pathtoconfig>

我尝试了很多方法来描述像 -c --config conf= -o conf= 这样的选项, 但没有效果

请帮我找到解决问题的正确途径:(

#include <stdio.h>
#include <unistd.h>

#include <string.h>

#include <stdlib.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <fuse.h>

#include "fuu_walk.h"
#include "jsmnload.h"

#define _JSMN_TOKEN_SIZE_ 256
#define _JSMN_BUFFER_SIZE_ 4096
#define MYFS_OPT(t, p, v) { t, offsetof(struct myfs_config, p), v }

struct myfs_config {
char *mystring;
} conf;

static struct fuse_opt myfs_opts[] = {
MYFS_OPT("-c %s", mystring, 1),

FUSE_OPT_END
};

jsmntok_t t[_JSMN_TOKEN_SIZE_];
char buf[_JSMN_BUFFER_SIZE_];
#if 0
= ""
"{\"root\": ["
"{\"path\":\"/\", \"mode\":\"drw-------\"},"
"{\"path\":\"/12ABC345DE67\", \"mode\":\"drw-------\"},"
"{\"path\":\"/12ABC345DE67/_XQ01\", \"mode\":\"-rw-------\"},"
"{\"path\":\"/12ABC345DE67/_XQ02\", \"mode\":\"-rw-------\"},"
"{\"path\":\"/12ABC345DE78\", \"mode\":\"drw-------\"},"
"{\"path\":\"/12ABC345DE89\", \"mode\":\"drw-------\"}"
"]}";
#endif


static int myfs_opt_proc(void *data, const char *arg, int key, struct fuse_args *outargs)
{
struct myfs_config *ptr = (struct myfs_config *)data;
FILE *conf;
int rc = 0;

//I wanna check the argument on the each iteration of fuse_opt_parse. It's just the debug printf
printf("arg = %s\t string %s\t key = %i\n", arg, ptr->mystring, key);
switch (key) {
case 1:
conf = fopen(ptr->mystring, "r");
rc = read(fileno(conf), buf, _JSMN_BUFFER_SIZE_);

if ( jsmnload(buf, t, _JSMN_TOKEN_SIZE_, fuu_mkfstree) < 0 ) {
printf("Error load configuration\n");
exit(-1);
}

}

return 1;
}

int main(int argc, char *argv[])
{
struct fuse_args args = FUSE_ARGS_INIT(argc, argv);

memset(&conf, 0, sizeof(conf));

fuse_opt_parse(&args, &conf, myfs_opts, myfs_opt_proc);

return fuu_main(args.argc, args.argv);
}

启动示例

./appendix/fuu /mnt/cdrom/ -c /mnt/fs.json

因此,myfs_opt_proc 函数中的 printf 只执行一次并输出

arg = /mnt/cdrom/        string (null)   key = -2

为什么 myfs_opt_proc 对选项 -c 不起作用?

最佳答案

我无法作为答案发表评论...查看您提供的引用资料,在我看来,没有以 -c 开头的选项。所以结果似乎是正确的,因为 fuse 无法解析它。从您的链接中查看此片段:

fuse_opt_add_arg(&args, "-omodules=subdir,subdir=/foo");

您可以尝试使用 -o 声明融合选项。


编辑:您的示例与链接的示例不同,请尝试将以下行添加到已定义的 struct:

FUSE_OPT_KEY("-c", "KEY_CONFIG");

和之前的一些行

emum {
KEY_CONFIG
};

然后在你的 myfs_opt_proc 函数中这样解析它

switch (key) {
case KEY_CONFIG:
/* ... */

.总而言之,您错过了声明 -c 键。

关于c - 在 C 中融合解析自定义参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37520976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com