有没有办法在 C 中用另一个函数调用来添加一组特定的函数?

Is there a way to prepend a certain group of functions with another function call in C?

我有一组函数,我希望仅当调用进程具有特定权限时才调用这些函数。我有一个可以进行检查的工作访问控制模块,我只想在一个地方定义这组函数,而不必每次在代码中调用时都手动进行。

所以,如果一个这样的受保护函数是 fread(),我想进行调用:accessCheck(processId,fread) 而不必在我希望进行调用的地方专门输入.我可以在某个地方以某种方式定义 fread() 以便它始终像这样“protected”吗?

这是在 C 顺便说一句。

您可以为每个受保护的函数定义一个宏,如下所示:

#include <stdio.h>

#undef fread
#define fread(ptr, size, n, fp) \
    (accessCheck(getpid(), (void (*)(void))fread ? (ssize_t)-1 : \
     fread((ptr), (size), (n), (fp)))

这里,getpid()是return当前进程ID的函数,accessCheck的原型是:

int accessCheck(pid_t pid, void (*fn)(void));

这里,pid_t是进程ID的类型。 fn(void (*)(void)) 类型的泛型函数指针。 fn 不会被 accessCheck 调用,只会检查指针值。 accessCheck 应该 return 成功时为 0,失败时应为非零值。失败时 accessCheck 还应将 errno 设置为合适的值。

#include <stdio.h>#undef fread 行是因为允许 #include <stdio.h> 定义一个宏 fread ,其行为与函数 fread 相同(尽管它似乎不太可能这样做),我们想替换那个宏。宏替换文本中对 fread 的引用很好,因为 C 宏不是递归的。