有没有办法在 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 宏不是递归的。
我有一组函数,我希望仅当调用进程具有特定权限时才调用这些函数。我有一个可以进行检查的工作访问控制模块,我只想在一个地方定义这组函数,而不必每次在代码中调用时都手动进行。
所以,如果一个这样的受保护函数是 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 宏不是递归的。