STDIN_FILENO的作用及与stdin 的区别
原文地址http://blog.csdn.net/yeyuangen/article/details/6781999
1.STDIN_FILENO的作用
STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。
操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备的文件描述符。
2.区别
1)数据类型不一致:
stdin类型为 FILE*
STDIN_FILENO类型为 int
使用stdin的函数主要有:fread、fwrite、fclose等,基本上都以f开头
使用STDIN_FILENO的函数有:read、write、close等
2)stdin等是FILE *类型,属于标准I/O,高级的输入输出函数。在<stdio.h>。
STDIN_FILENO等是文件描述符,是非负整数,一般定义为0, 1, 2,属于没有buffer的I/O,直接调用系统调用,在<unistd.h>。
3)STDIN_FILENO 是标准输入的文件描述符
详见/usr/include/unistd.h
代码:
/* Standard file descriptors. */
#define STDIN_FILENO 0 /* Standard input. */
#define STDOUT_FILENO 1 /* Standard output. */
#define STDERR_FILENO 2 /* Standard error output. */
4)层次不一样。STDIN 属于标准库处理的输入流,其声明为 FILE 型的,对应的函数前面都有f开头,如fopen/fread/fwrite/fclose 标准库调用等
STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。
标准库内封装了系统 API 调用,如 fread 内部实现调用 read。
5)操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。
补充:
1,linux进程终止时,内核会关闭该进程的所有打开文件描述符
2,read,write的buffer大小对性能有影响,通常设置为文件系统的block_size大小。
3,read函数每次指定的大小不一定能获取指定数量的数据
4,write通过lseek写的空洞文件,通常不占用磁盘块,再具体写入的适合再分配(除非预先全部设置)
分享到:
相关推荐
tcgetattr(STDIN_FILENO, &oldt;); newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW,&newt;); oldf = fcntl(STDIN_FILENO, F_GETFL, 0); fcntl(STDIN_FILENO, F_SETFL, oldf |O_...
res=tcgetattr(STDIN_FILENO, &org;_opts); assert(res==0); //从新设置终端参数 memcpy(&new;_opts, &org;_opts, sizeof(new_opts)); new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ...
isatty()函数 头文件: #include 定义函数: int isatty(int desc); 函数说明:如果参数 desc 所代表的文件描述词为一终端机则返回1, 否则返回0. 返回值:如果文件为终端机则返回1, 否则返回0. ...
源码mac swift console,main.swift 主要是做逻辑判断的,File.c 是处理键盘输入和获取光标位置 打砖块-Bridging-... select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv); return FD_ISSET(STDIN_FILENO, &rdfs); }
主要介绍了在Python程序中操作文件之isatty()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下
Linux下的文件标述符和文件指针 文件标识符: 首先我们来了解一下文件标识符是什么东西? 文件描述符是计算机科学中的一个术语,是一个用于表述只想文件的引用的抽象...STDIN_FILENO stdin 1 Standard output STDOUT_FI
程序默认从标准输入STDIN_FILENO读取输入文件,可以利用shell的输入定向功能选择具体的输入文件。 系统调用times()的说明 #include clock_t times(struct tms *buf); struct tms { clock_t tms_utime; /* 记录...
在嵌入式、尤其是机器人的python编程中,经常需要... fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) try: tty.setraw(sys.stdin.fileno()) ch = sys.stdin.read(1) finally: termios.tcsetatt
dup2(f_des[0],STDIN_FILENO); close(f_des[0]); } execl(SHELL,"sh","-c",command,(char*)0); _exit(127); char *argv[] = {command,0}; if(execvp(command,argv)==-1) return NULL; } wait(0); if(type[0...
用法示例 示例源代码: #include #include static int macro_fn(void) { /* Print a tab before each macro, and a comma and ... gfxd_input_fd(fileno(stdin)); gfxd_output_fd(fileno(stdout)); /* Overr
QT父子进程间通讯,父进程通过writeData发送数据,子进程通过读取标准输入获取数据。