gpt4 book ai didi

c++ - Open() 系统调用文件描述器

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:27 24 4
gpt4 key购买 nike

我必须更正 posix 操作系统的 open() 系统调用的返回值。我从 man-Pages 了解到它必须返回 文件描述符,并且,如果出现错误,系统调用将返回 -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 是所有系统调用所在的 namesapacesyscaller 用于将调用发送到内核,调用 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;
}

}

最佳答案

我不知道“我无法获取文件描述符”是什么意思。正如您提到的 open() 返回它。它只是存储在一个整型变量中。如果此变量等于 -1,则说明出现了问题。例如,如果你有

int file = open(path, O_SYNC, O_DIRECT, O_RDONLY);

但是您没有名为path 的文件的读取权限,变量file 将获得-1 的值。可以通过 read()(如果文件以读取模式打开)和 write()(如果文件以写入模式打开)对打开的文件进行其他操作。我建议你阅读 documentation on the open() function更仔细。如果您需要对文件描述符进行更多控制,我建议您使用 fopen():

关于c++ - Open() 系统调用文件描述器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26832167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com