- 浏览: 146688 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lyaqys:
lz实现的OptimisticExclusiveLock有点问 ...
java park/unpark 【java并发】基于JUC CAS原理,自己实现简单独占锁
STDIN_FILENO的作用及与stdin 的区别
- 博客分类:
- c语言
if(NULL == fgets(msg,100,stdin)){
18
19 // msg 末尾有换行副(\n\0)
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就是标准输入设备(一般是键盘)的文件描述符。
6)曾经很纳闷,为什么一个整形fd(STDIN_FILENO=0)就可以代表一个打开的文件呢?
后来明白了,和我们的手机号是类似的,手机号只是一个9位数的整形,但是在移动通话网络里,它就可以用来区分不同的手机终端。
标准C++一级提供的文件操作函数库都是用FILE*来表示文件,stdin就是指向标准输入设备文件的FILE*。
发表评论
-
c语言链表实现学生管理
2013-10-28 14:13 867#include<stdio.h> #includ ... -
简单的linux -c http-client
2013-10-23 15:35 4670#include<stdio.h> #includ ... -
毗连“"aa"”和“"bb"”不能给出一个有效的预处理标识符,gcc编译错误表
2013-10-01 18:54 2865gcc bug : ##’ cannot appear at ... -
负数转化为整数
2013-10-01 12:02 1295负数转化为整数 int a = -1321313; 12 ... -
c++ 动态内存分配
2013-08-28 22:35 783先看一段代码: [cpp] view plaincopy ... -
文件结束符EOF,system("stty raw")
2013-08-14 10:47 1506>> 关于文件结束符EOF EOF 是 End O ... -
c 专家编程
2013-08-13 17:06 656总结: -2> int * a = NUL ... -
c语言api
2013-07-31 21:06 640原型:extern int isalnum(int c); 用 ... -
c 语言无符号类型使用注意,类型升级
2013-07-30 14:37 589#define SS sizeof(int) 5 int ... -
判断两个一个链表是否存在循环(C专家编程中的问题)
2013-06-24 15:35 875判断两个一个链表是否存在循环(C专家编程中的问题) #incl ... -
atoi源码
2013-05-14 19:32 1224原文: http://blog.csdn.net/eroswa ... -
c语言特殊字符串复制
2013-05-06 01:59 8302.strcpy和memcpy主要有以下3方面的区别。 2.1 ... -
《APUE》:线程和fork(父子进程锁)
2013-04-29 21:07 1111《Unix环境高级编程》这本书附带了许多短小精美的小程序,我在 ... -
Linux多线程同步的几种方式
2013-04-22 22:49 737Linux多线程同步的几种方式 线程的最大特点是资 ... -
sphinx 安装
2013-04-10 19:54 504[@zw-76-80 soft]$ rpm -ivh MySQ ... -
防止pause和alrm产生竞争
2013-04-08 22:51 7681 #include<stdio.h> 2 ... -
关于linux环境下信号SIGCHLD的排队机制
2013-04-07 22:13 1494下面是关于在SIGCHLD的一遍网上的摘要,但是在linux中 ... -
alarm与pause
2013-04-07 20:12 7081 #include<stdio.h> 2 ... -
Linux下的定时器
2013-04-07 20:05 613Linux下的定时器有两种,以下分别介绍: 1、 ... -
linux 信号量
2013-04-04 22:24 623目录 SIGCHLD 描述 编辑本段SIG ...
相关推荐
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...
QT父子进程间通讯,父进程通过writeData发送数据,子进程通过读取标准输入获取数据。
用法示例 示例源代码: #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