0

我正在开发一个使用 Rsync 的应用程序。我在 rsync 代码中为 HTTP 添加了一个选项,例如“--verbose”的“-v”。

但现在我想选择这个选项来接受论点。为此,在 options.c 文件中,我在结构数组中添加了条目,

static struct poptOption long_options[] = {
  /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */
  {"xxxx",             'x',  xxxxxxx,   x, xxxxx, x, x},
  {"https",            'N', POPT_ARG_VAL,    &https_port, 0, 0, 0}}  

这里我提供的值应该是 variable https_port。但我得到的错误是

Rsync: -N=1234: option does not take an argument

我需要进行更多更改以使 N 选项接受参数。

谢谢

4

2 回答 2

1

你确定你正在使用修改后的 rsync 吗?

popt建议的手册页POPT_ARG_INT

Value               Description                       arg Type
POPT_ARG_NONE       No argument expected              int
POPT_ARG_STRING     No type checking to be performed  char *
POPT_ARG_INT        An integer argument is expected   int
POPT_ARG_LONG       A long integer is expected        long
POPT_ARG_VAL        Integer value taken from CWval    int
POPT_ARG_FLOAT      An float argument is expected     float
POPT_ARG_DOUBLE     A double argument is expected     double

链接到的手册页只有一个参考CWval,没有解释它的实际含义。

于 2013-06-03T16:29:56.857 回答
1

您必须将 arg 解析为POPT_ARG_STRING而不是POPT_ARG_VAL,然后将其转换为整数(或其他)。

max-size实现为例:

{"max-size",         0,  POPT_ARG_STRING, &max_size_arg, OPT_MAX_SIZE, 0, 0 },
于 2013-06-03T16:31:14.277 回答