Мне нужно исправить возвращаемое значение системного вызова open()
ОС posix. Из справочных страниц я понял, что он должен возвращать файловый дескриптор, а в случае ошибки системный вызов вернет -1 и установит errno
значение. Проблема в том, что я не знаю, как получить файловый дескриптор для открытого узла. Я проверил все файлы и не нашел метода, который может назначать fd процессам.
Вот метод:
int syscalls::open(const char *path, int oflags, mode_t mode){
syscall_message msg;
msg.call.type = syscalls::open_call;
msg.open_data.path_name = &path[0];
msg.open_data.flags = oflags;
msg.open_data.create_mode = mode;
syscaller::call_system(msg);
return msg.error.number;
}
syscall_message
— это структура, содержащая информацию о данных для системного вызова. syscalls
— это namesapace
, где находятся все системные вызовы. syscaller
используется для отправки вызова ядру, отменяя метод call_system
.
Метод call_system
:
syscalls::open_call:
{
//get the file
i_fs_node_ptr file = i_fs::open_node( msg.open_data.path_name );
//add the file handle
if ( file )
{
cur_process->push_filehandle(
file,
msg.open_data.flags,
msg.open_data.create_mode );
}
else
{
msg.error.type = syscalls::e_no_such_entry;
}
}
syscall_message
,syscalls
иsyscaller
? Являются ли они частью какой-то используемой вами библиотеки или фреймворка? - person   schedule 09.11.2014