仅在某些条件下插入fscanf

时间:2017-10-20 20:05:13

标签: c scanf library-interposition

所以我试图覆盖c中的fscanf函数,但我只想要满足某些条件时会发生不同的行为;如果不满足这些条件,我想打电话给原来的fscanf。我知道你可以使用dlsym在插入函数时使用函数的原始版本,但fscanf的问题在于它的可变参数。我可以使用va_list和va_arg将所有参数传递到我的函数中,但是当我不知道有多少参数时,我应该如何调用这些参数的原始fscanf?

1 个答案:

答案 0 :(得分:0)

您无法通过插入的fscanf调用原始fscanf。您只需致电vfscanf()即可。您插入的功能如下:

int fscanf(FILE *stream, const char *format, ...)
{
    ....
    ....

    va_list ap; 
    va_start(ap, format);
    int rc = vfscanf(stream, format, ap);
    va_end(ap);
    return rc;
 }