首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在Linux1.0中open()没有“fd”返回?

为什么在Linux1.0中open()没有“fd”返回?
EN

Stack Overflow用户
提问于 2019-02-11 09:41:37
回答 1查看 170关注 0票数 0

由于没有返回的'fd',它如何读/写以后呢?

例:

代码语言:javascript
复制
void init(void)
{
 ....
 (void) open("/dev/tty1",O_RDWR,0);
 ....
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-11 10:02:23

open在那里返回一个值。强制转换为空用于向编译器发出信号,表示返回值被故意忽略.

init函数是当前线程准备在用户空间执行init程序的函数。init将期望打开标准的in、out和错误描述符。完整的代码如下:

代码语言:javascript
复制
(void) open("/dev/tty1",O_RDWR,0);
(void) dup(0);
(void) dup(0);

不需要将返回值存储到任何东西,因为open保证使用--最低的空闲描述符,而进程在输入该函数之前不使用任何描述符,因此open将返回0。返回最低免费值的相同规则也适用于dup。在这3个调用之后,所有描述符0、1和2共享相同的文件描述,这也意味着您可以在标准错误中写入和读取标准文件。

这也许是一种微观优化,但实际上不需要使用变量,在已知open的返回值时,编译器就会生成低于标准的代码--这与

代码语言:javascript
复制
int fd = open("/dev/tty1",O_RDWR,0);
assert(fd == 0);
(void) dup(fd);
(void) dup(fd);

在目前的修订中有一个断言,检查open是否失败:

代码语言:javascript
复制
/* Open the /dev/console on the rootfs, this should never fail */
if (ksys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
    pr_err("Warning: unable to open an initial console.\n");

(void) ksys_dup(0);
(void) ksys_dup(0);

但是,实际的文件描述符返回值将被忽略。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54627618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档