12
返回列表 发新帖
楼主: techDiscussion
跳转到指定楼层
上一主题 下一主题
收起左侧

[学C/C++] 关于C语言程序的一个问题

🔗
mgal059 2020-12-6 15:53:29 | 只看该作者
全局:
fd = 0 是stdin,所以read(0, xxx) 就是从stdin 中读buffer.

评分

参与人数 1大米 +1 收起 理由
techDiscussion + 1 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
 楼主| techDiscussion 2020-12-7 03:09:09 | 只看该作者
全局:
sshou14 发表于 2020-12-6 13:06
怎么理解: “a file descriptor obtained from the open system call“ ?
> 请看 `man 2 open`的介绍 "Gi ...

但是你在哪里看到我pass的是0呢 ?
回复

使用道具 举报

🔗
sshou14 2020-12-7 03:34:01 | 只看该作者
全局:
techDiscussion 发表于 2020-12-7 03:09
但是你在哪里看到我pass的是0呢 ?

你的程序里设的fdTiger=0然后你call read的时候pass的是 fdTiger, 所以是stdin

评分

参与人数 1大米 +1 收起 理由
techDiscussion + 1 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
helloworld27 2020-12-7 05:24:08 | 只看该作者
全局:
这个其实和C语言关系不大,如果想详细了解的话可以学习一下操作系统。

简单地来说,file descriptor 并不是一个指针,只是操作系统创建的一个编号。一般file descriptor是分配给文件的,但实际上任何输入输出设备都可以被当成文件用,包括终端(就是键盘输入输出)。前三个编号0,1,2的目标一般是标准输入(终端输入),标准输出(终端输出)和标准错误输出(终端输出),这是惯例,在main函数开始之前就由初始化程序帮你设置好了。因为你没有改变标准输入输出的目标,所以用编号0就代表了终端。真正的文件指针在操作系统里被保护着,你的程序看不到也操作不了,需要的时候操作系统会通过 file descriptor 去查询这个指针。

评分

参与人数 1大米 +1 收起 理由
techDiscussion + 1 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
bananamon 2020-12-14 11:04:18 | 只看该作者
全局:
首先fdTiger不是指针,你可以理解是当前进程中维护的一个表的下标,这个表的名字叫file descriptor table,每一行包含了 对应的fd flags 和一个 file pointer。表中前三行是也就是下标0,1,2分别被叫stdin,stdout,stderr。这三行中的file pointer 分别指向了 内存中另外一个全局的open file table的不同条目,如果你没有用dup2命令修改这三个指针,他们默认指向标准输入,标准输出,和标准err 对应的file table项,对应到磁盘上的文件是/dev/stdin, /dev/stdout/, /dev/stderr. 这些文件类型是字符设备文件,用来被键盘等字符设备访问(你用ls -l 可以看到第一个字符是c)。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表