我的 C 代码中遇到一个问题,即我的系统调用未触发 if 语句。我的代码正在尝试检测 LKSCTP 是否已加载。
当 LKSCTP 未加载到内核中时,“/sbin/lsmod | grep sctp | wc -l”将返回 0。在这种情况下,程序应该退出并输出 2 行。
如果已加载,则返回非零数字,程序应继续。
但是,在这两种情况下,“wc -l”的行数都被打印(?),并且与 0 相比不正确,并且程序正在退出。
第一次尝试:
if ( system("/sbin/lsmod |grep sctp |wc -l") == 0 )
{
/* no output, sctp is not loaded */
ULCM_MSG("'/sbin/lsmod |grep sctp' failed! LKSCTP cannot be loaded.");
ULCM_MSG("LKSCTP not installed or black-listed.");
exit(1);
}
输出:
4 9 月 25 日 14:45:34.648 '/sbin/lsmod |grep sctp' 失败!无法加载 LKSCTP。 9 月 25 日 14:45:34.648 LKSCTP 未安装或已列入黑名单。
第二次尝试(尝试将返回值转换为整数):
int check = -1;
check = system("/sbin/lsmod |grep sctp |wc -l");
if(check == 0)
{
/* no output, sctp is not loaded */
ULCM_MSG("'/sbin/lsmod |grep sctp' failed! LKSCTP cannot be loaded.");
ULCM_MSG("LKSCTP not installed or black-listed.");
exit(1);
}
输出:同上。
我尝试将 system() 返回值转换为整数。我需要能够检查“lsmod | grep sctp | wc -l”值以获取通过/失败的零/非零值。
wc -l
总是返回成功(退出代码 0)。在 shell 中尝试一下:echo -n '' | wc -l; echo $?
和 echo hello | wc -l; echo $?
都会在末尾打印 0。不管有没有行数。我觉得您将退出代码与标准输出混淆了。
但是,我认为您已经采用了过于复杂的方式 - 您可以删除
wc -l
并简单地检查 grep
的退出代码是否为非零,因为 grep
will 会给您一个非零退出未找到模式时的代码(再次检查您的 shell:echo foo | grep hi; echo $?
显示 1,而 echo hi | grep hi; echo $?
显示 0)。
if ( system("/sbin/lsmod | grep sctp") != 0 )