我目前正在编写一个需要向内核添加新系统调用的作业,而且在C中编写系统调用测试时遇到了一个奇怪的问题。
在其中一个测试中,我将系统调用的返回值与值1进行比较,即使系统调用返回1,if语句也会失败。
用于比较的MACRO:
#define CHECK(expr,expected) \
if ((expected) !=(expr)) {\
printf("\nCheck failed (%s:%d).\n", __FILE__, __LINE__); \
printf("Expected: %d, got: %d\n", expected, expr);\
test_failed = 1; \
}
测试失败的行:
CHECK(unblock_program(strings[PROG_A], lengths[PROG_A]), 1);
我在linux-2.4.18-14上运行测试。
答案 0 :(得分:1)
如果出现错误,系统调用将返回-1。
您必须检查包含系统调用的返回值的errno的值。
当系统调用成功时,它必须返回0,而不是1。