`
lionvp
  • 浏览: 30900 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

对stdin,stdout 和 STDOUT_FILENO,STDIN_FILENO的学习

阅读更多
在unix系统调用中,标准输入 描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FILENO,标准出错用STDERR_FILENO.他们的区别: stdin等是FILE *类型,属于标 准I/O,在<stdio.h>。STDIN_FILENO等是文件描述 符,是非负整数,一般定义为0, 1, 2,属于没有buffer的I/O,直接调用系统调用,在<unistd.h>。下面一个例子是对 STDOUT_FIFENO 和STDIN_FILENO的应用:#include<unistd.h> #define SIZE 100 int main(void) {         int n;         char buf[SIZE];         while(n=read( STDIN_FILENO ,buf,SIZE))   //读取标准输入到 buf中,返回读取字节数。      {                 if(n!=write( STDOUT_FILENO ,buf,n)) 把buf 写 到标准输出中                        perror("write  error");        }         if(n<0) perror("read error");         return 0; } +++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++如果按照常规的使用方法: fan@fan:~/arm$ gcc -o app  stdout.cfan@fan:~/arm$ ./app fdfe fdfe fefefef fefefef //输入一行,马上输出一行, 也就是按照原样输出========================= ==================================================使用重定向来运行 fan@fan:~/arm$ ./app> data fefe fdadfdf adfdfef //输入的字符串并不是输出到 终端,而是输出到data文件中。========================= =================================================fan@fan:~/arm$ ./app <stdout.c >datafan@fan:~/arm$ //这一句相当于把stdout.c复 制到data中去+++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++=STDOUT_FILENO和STDIN_FILENO 在默认的情况下是终端,使用ctrl+D来输入文件结束符

STDOUT_FILENO是标准输出的 文件描述符,int类型。stdout是标准输出流,FILE *类 型,注意是小写。
分享到:
评论

相关推荐

    ucrt_crash_on_printf:在_setmode(_fileno(stdout),_O_U8TEXT)之后,使用printf会使程序崩溃

    该问题描述了在调用`_setmode(_fileno(stdout), _O_U8TEXT)`后,尝试使用`printf`函数会导致程序崩溃。这涉及到文件模式设置、文本和二进制模式转换以及Unicode编码,特别是UTF-8编码在输出流中的应用。 首先,`_...

    libgfxd:显示列表反汇编程序库

    用法示例 示例源代码: #include #include static int macro_fn(void) ... /* Read from stdin and write to stdout */ gfxd_input_fd(fileno(stdin)); gfxd_output_fd(fileno(stdout)); /* Overr

    在图形界面程序里使用控制台窗口

    在GUI程序中,我们可能还需要重定向标准输入输出流(`stdin`,`stdout`,`stderr`)到控制台,这样就可以使用C++的标准I/O库进行读写操作。这可以通过打开控制台的句柄并设置`_setmode()`来实现: ```cpp freopen(...

    _stdio_file.rar_One Three One

    标题中的"_stdio_file.rar_One Three One"可能是指在C语言编程中涉及标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)这三个核心流之一的文件操作。描述中提到的"get the definition of fileno"和...

    不依赖于DLL就能工作的全局钩子

    通过对以上介绍和示例代码的分析,我们可以看到并非所有的全局钩子都需要依赖于DLL才能正常工作。特别是`WH_JOURNALPLAYBACK`、`WH_JOURNALRECORD`、`WH_KEYBOARD_LL`和`WH_MOUSE_LL`这几种类型的全局钩子,由于它们...

    UNIX环境高级编程01

    它们分别由文件描述符STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO标识,并通过预定义的文件指针stdin、stdout和stderr引用。这些文件指针定义在头文件中,是进行基本输入输出操作的基础。 标准I/O库引入缓存机制来...

    UNIX环境高级编程003

    POSIX.1标准中,这些值通常用常量STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO表示。文件描述符的范围通常在0到OPEN_MAX之间,早期的UNIX系统限制为19,但现在许多系统已扩大到更高的数值。 3. **open函数**:open...

    UNIX环境高级编程(第五章)

    5.3 标准输入、标准输出和标准出错是预定义的三个流,分别对应文件描述符STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO。它们由预定义的文件指针stdin、stdout和stderr引用,方便程序员进行输入输出操作。 5.4 缓存...

    Unix环境高级编程3

    在POSIX.1标准中,这些描述符被符号常数STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO所代表。文件描述符的范围通常从0到OPEN_MAX,这个上限值在不同的Unix系统中可能有所不同,早期系统通常是19,现代系统可能会更高...

    UNIXLinux环境高级编程.pptx

    - 标准I/O描述符在POSIX.1中定义为常量:STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO。 - 文件描述符的范围通常是0到OPEN_MAX,具体值取决于系统的配置。 3. **原始系统数据类型**: - 在UNIX/Linux编程中,以...

    详解Linux下的文件标述符和文件指针

    Linux下的文件标述符和文件指针 文件标识符: 首先我们来了解一下文件标识符是什么东西? 文件描述符是计算机科学中的一个术语,是一个用于表述只想文件的引用的抽象...STDIN_FILENO stdin 1 Standard output STDOUT_FI

    MFC中使用控制台输入输出

    _fdopen_s(&outStream, _fileno(stdout), "w"); _fdopen_s(&errStream, _fileno(stderr), "w"); // 重定向 freopen_s(&inStream, "CONIN$", "r", stdin); freopen_s(&outStream, "CONOUT$", "w", stdout); ...

    APUE(UNIX环境高级编程)——文件I/O篇

    POSIX.1标准中,这些常数用`STDIN_FILENO`、`STDOUT_FILENO`和`STDERR_FILENO`表示。文件描述符的范围在0到`OPEN_MAX`之间,早期系统可能限制为19,现代系统则通常扩展到63或更高,具体取决于系统配置。 【open函数...

    Linux实验七:LinuxC-编程-文件与目录.doc

    在C语言中,`stdin`(标准输入)、`stdout`(标准输出)和`stderr`(标准错误)是预定义的文件描述符。在示例中,`read()`函数用于从`stdin`读取数据,`write()`函数则将数据写入`stdout`。这段代码实现了将标准输入的内容...

    【技术分享】从puts函数执行角度看_IO_FILE的使用 .pdf

    在Linux系统中,预设的_FILENO值0、1、2分别代表stdin(标准输入)、stdout(标准输出)和stderr(标准错误)。 结构体 `_IO_FILE` 包含多个字段,如: 1. `_flags`:存储了魔术头和标志位,例如`_IO_IS_FILEBUF`、...

    习题答案全linux.doc

    - 标准输入(STDIN_FILENO)、标准输出(STDOUT_FILENO)和标准错误输出(STDERR_FILENO)的文件描述符分别是0、1和2。 - 可以使用`dup2`系统调用来重定向输出,如将标准输出重定向到文件描述符6对应的文件。 ...

    在Python程序中操作文件之isatty()方法的使用教程

    当一个文件对象通过标准输入、输出或错误流(stdin, stdout, stderr)与终端相连时,`isatty()`通常会返回`True`。例如,在命令行中运行一个Python脚本时,这些流默认是与终端关联的。如果文件对象是一个普通的文本...

    C 标准I/O库的粗略实现教程

    初始化`stdio`库中的预定义文件流`stdin`、`stdout`和`stderr`,可以使用类似如下的初始化结构体数组`_iob`。每个元素代表一个文件流,其`flag`字段记录相应的模式和状态。 `_ferror`、`_feof`和`_fileno`是用于...

Global site tag (gtag.js) - Google Analytics