Я, вероятно, использую свою функцию чтения с какой-то ошибкой, но не могу ее распознать.Как пользоваться системным вызовом Читать? Ошибка скрещения сегментации (ядро сбрасывается)
#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();
Как я могу исправить эту ошибку сегментации (ядро сбрасывали) проблемы?
Шаг 1. Проверьте возвращаемое значение всех системных вызовов, чтобы убедиться в их успешности. Шаг 2. Проверьте, что на самом деле находится в 'выборе', прежде чем использовать его. – melpomene
Кроме того, попробуйте получить этот код, работающий с 'fread',' fwrite' и 'exit', прежде чем вы начнете возиться с syscalls. – melpomene
Вы уверены в этих аргументах для 'read'? –