由于没有返回的'fd',它如何读/写以后呢?
例:
void init(void)
{
....
(void) open("/dev/tty1",O_RDWR,0);
....发布于 2019-02-11 10:02:23
open在那里返回一个值。强制转换为空用于向编译器发出信号,表示返回值被故意忽略.
init函数是当前线程准备在用户空间执行init程序的函数。init将期望打开标准的in、out和错误描述符。完整的代码如下:
(void) open("/dev/tty1",O_RDWR,0);
(void) dup(0);
(void) dup(0);不需要将返回值存储到任何东西,因为open保证使用--最低的空闲描述符,而进程在输入该函数之前不使用任何描述符,因此open将返回0。返回最低免费值的相同规则也适用于dup。在这3个调用之后,所有描述符0、1和2共享相同的文件描述,这也意味着您可以在标准错误中写入和读取标准文件。
这也许是一种微观优化,但实际上不需要使用变量,在已知open的返回值时,编译器就会生成低于标准的代码--这与
int fd = open("/dev/tty1",O_RDWR,0);
assert(fd == 0);
(void) dup(fd);
(void) dup(fd);在目前的修订中有一个断言,检查open是否失败:
/* 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);但是,实际的文件描述符返回值将被忽略。
https://stackoverflow.com/questions/54627618
复制相似问题