stdin 由标准C库实现, STDIN_FILENO是指0号文件描述符。
标准库内封装了系统 API 调用,如 fread 内部实现调用 read。STDIN 属于标准库处理的输入流,其声明为 FILE 型的,对应的函数前面都有f开头,如fopen/fread/fwrite/fclose 标准库调用等。
STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。文件描述符是linux内核(类unix操作系统)专有概念,对文件描述符的操作属于系统调用,无法在windows或其他系统中找到。
在linux下,stdin的实现必然依赖于文件描述符。也就是说这两个东西在不同的层次,一个是用户层的C库,一个是系统层的系统调用。
阅读(1935) | 评论(0) | 转发(0) |