Mar*_*ark 0 c linux kernel driver
由于'fd'没有返回,它后来如何读/写?
例如:
void init(void)
{
....
(void) open("/dev/tty1",O_RDWR,0);
....
Run Code Online (Sandbox Code Playgroud)
open
在那里返回一个值.cast-to-void用于向编译器发出有意忽略返回值的信号.
该init
函数是当前线程准备init
在用户空间中执行程序的函数.init
将期望打开标准输入,输出和错误描述符.完整的代码是这样的:
(void) open("/dev/tty1",O_RDWR,0);
(void) dup(0);
(void) dup(0);
Run Code Online (Sandbox Code Playgroud)
有没有需要存储的返回值到任何东西,因为open
是保证用最低的空闲描述符,没有通过过程进入此功能之前所使用,从而open
将返回返回0的规则相同最低自由应用于dup
以及.在这3次调用之后,所有描述符0,1和2共享相同的文件描述,这也意味着您可以写入标准输入并从标准错误中读取.
这也许是一个微型的优化,但确实没有必要使用一个变量,并编译器生成的代码不合的时候开的返回值是已知的-它是毕竟类似于
int fd = open("/dev/tty1",O_RDWR,0);
assert(fd == 0);
(void) dup(fd);
(void) dup(fd);
Run Code Online (Sandbox Code Playgroud)
在当前版本存在的到位断言,检查该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);
Run Code Online (Sandbox Code Playgroud)
但是,实际的文件描述符返回值被忽略.
归档时间: |
|
查看次数: |
98 次 |
最近记录: |