【发布时间】:2017-01-25 22:37:23
【问题描述】:
我可能在使用我的读取功能时出现了某种错误,但我无法识别它。
#include <unistd.h>
#include <sys/sysinfo.h>
#include <sys/syscall.h>
void exitProgram()
{
syscall(SYS_write, 1, "norma", slen("norma"));
syscall(SYS_exit, 1 , 0);
}
int main()
{
func_desc arr[2];
int choice;
arr[0].name = "exit";
arr[0].func = &exitProgram;
syscall(SYS_write, 1, "Choose: ", slen("Choose: "));
syscall(SYS_read, 0, choice, sizeof(choice));
arr[choice-1].func();
return 0;
}
如果选择是“1”,那么它应该调用 exitProgram(),但它会显示分段错误(核心转储)。当我写一个特定的数字时,它就会起作用(示例):
arr[0].func();
如何解决此分段错误(核心转储)问题?
【问题讨论】:
-
第一步:检查所有系统调用的返回值,确保它们成功。第 2 步:在使用之前检查
choice中的实际内容。 -
另外,在你开始搞乱系统调用之前,不妨尝试让这段代码与
fread、fwrite和exit一起工作。 -
你确定
read的那些论点吗? -
试试
syscall(SYS_read, 0, (void*)&choice, sizeof(choice)); -
@melpomene:这可能不是消息,但至少 OP 可以在系统调用周围使用 glibc 包装器......
标签: c linux system system-calls