精华内容
下载资源
问答
  • C语言标准输入流、标准输出流、标准错误输出流 ...在C语言中,在程序开始运行时,系统自动打开3个标准文件标准输入、 标准输出、标准出错输出。通常这3个文件都与终端相联系。因此,以前我们所用到的...

    C语言中标准输入流、标准输出流、标准错误输出流


    在Linux中,所有对设备和文件的操作都使用文件描述符来进行。

    Linux中一个进程启动时,都会打开3个文件:标准输入、标准输出和标准出错处理。这三个文件分别对应文件描述符0、1、2。

     

    在C语言中,在程序开始运行时,系统自动打开3个标准文件:标准输入、 标准输出、标准出错输出。通常这3个文件都与终端相联系。因此,以前我们所用到的从终端输入或输出都不需要打开终端文件。系统自定义了3个文件指针stdin、stdout、stderr,分别指向终端输入、终端输出和标准出错输出(也从终端输出)。

    标准输入流:stdin

    标准输出流:stdout

    标准错误输出流:stderr

     


    测试代码:

    #include <stdio.h>
    
    int main()
    {
            int a = 0;
            char szTmp[100] = {0};
            try
            {
                    fprintf(stdout, "please input a:\n");
                    fscanf(stdin, "%d", &a);
                    fprintf(stdout, "a=%d\n", a);
    
                    fprintf(stdout, "please input szTmp:\n");
                    fscanf(stdin, "%s", szTmp);
                    fprintf(stdout, "szTmp:%s\n", szTmp);
            }
            catch(...)
            {
                    fprintf(stderr, "input error!");
            }
    
            return 0;
    }
     



    编译:

    g++ -o a a.cpp


    测试结果:

    ./a 

    please input a:

    123

    a=123

    please input szTmp:

    aaaaaaaaaaaaaaaaaaaaaaa

    szTmp:aaaaaaaaaaaaaaaaaaaaaaa



    PS:相关文档

    stdin


    object

    <cstdio>

    FILE * stdin;

    Standard input stream

    The standard input stream is the default source of data for applications. It is usually directed to the input device of the standard console (generally, a keyboard).


    stdin can be used as an argument for any function that expects an input stream as one of its parameters, like fgets or fscanf.


    Although it is generally safe to assume that the source of data for stdin is going to be a keyboard, bear in mind that this may not be the case even in regular console systems, since stdin can be redirected at the operating system level. For example, many systems, among them DOS/Windows and most UNIX shells, support the following command syntax:


    myapplication < example.txt


    to use the content of the file example.txt as the primary source of data for myapplication instead of the console keyboard.


    It is also possible to redirect stdin to some other source of data from within a program using the freopen function.

    stdout



    object

    <cstdio>

    FILE * stdout;

    Standard output stream

    The standard output stream is the default destination of regular output for applications. It is usually directed to the output device of the standard console (generally, the screen).


    stdout can be used as an argument for any function that expects an output stream as one of its parameters, like fputs or fprintf.


    Although it is generally safe to assume that the default destination for stdout is going to be the screen, bear in mind that this may not be the case even in regular console systems, since stdout can be redirected at the operating system level. For example, many systems, among them DOS/Windows and most UNIX shells, support the following command syntax:


    myapplication > example.txt


    to redirect the output of myapplication to the file example.txt instead of the screen.


    It is also possible to redirect stdout to some other source of data from within a program using the freopen function.

    stderr



    object

    <cstdio>

    FILE * stderr;

    Standard error stream

    The standard error stream is the default destination for error messages and other diagnostic warnings. Like stdout, it is usually also directed to the output device of the standard console (generally, the screen).


    stderr can be used as an argument for any function that expects an output stream as one of its parameters, like fputs or fprintf.


    Although generally both stdout and stderr are associated with the same console output, applications may differentiate between what is sent to stdout and what to stderrfor the case that one of them is redirected. For example, it is frequent to redirect the regular output of a console program (stdout) to a file while expecting the error messages to keep appearing in the console screen.


    It is also possible to redirect stderr to some other destination from within a program using the freopen function.

    perror



    function

    <cstdio>

    void perror ( const char * str );

    Print error message

    Interprets the value of the global variable errno into a string and prints that string to stderr (standard error output stream, usually the screen), optionaly preceding it with the custom message specified in str.

    errno is an integral variable whose value describes the last error produced by a call to a library function. The error strings produced by perror depend on the developing platform and compiler.

    If the parameter str is not a null pointer, str is printed followed by a colon (:) and a space. Then, whether str was a null pointer or not, the generated error description is printed followed by a newline character ('\n').

    perror should be called right after the error was produced, otherwise it can be overwritten in calls to other functions.


    Parameters.


    str

    C string containing a custom message to be printed before the error message itself.

    If it is a null pointer, no preceding custom message is printed, but the error message is printed anyway.

    By convention, the name of the application itself is generally used as parameter.


     

    展开全文
  • C语言 文件输入输出

    千次阅读 2019-07-31 15:37:51
    C语言程序在进行文件操作时遵循如下操作步骤: 打开->读写操作->关闭,通俗地说,打开是获取文件结构、系统为文件分配缓冲区的过程,不打开文件就不能对...stdin:标准输入文件指针,系统分配为键盘。 stdou...

    C语言程序在进行文件操作时遵循如下操作步骤:
    打开->读写操作->关闭,通俗地说,打开是获取文件结构、系统为文件分配缓冲区的过程,不打开文件就不能对其进行读写,关闭是释放缓冲区和其他资源的过程,不关闭文件就会慢慢耗光系统资源。


    在进行文件操作时,系统自动与3个标准设备文件联系,这3个文件无需打开和关闭,它们的文件指针分别是:
    stdin:标准输入文件指针,系统分配为键盘。
    stdout:标准输出文件指针,系统分配为显示器。
    stderr:标准错误输出文件指针,系统分配为显示器。

    stdout与stderr的区别:
    stdout(标准输出),输出方式是行缓冲。输出的字符会先存放在缓冲区,等按下回车键时才进行实际的I/O操作。
    stderr(标准错误),是不带缓冲的,这使得出错信息可以直接尽快地显示出来


    1.显示器输出

    输出相同的语句
    在这里插入图片描述
    puts和fputs,puchar和fputc,都同上面一样如图:
    在这里插入图片描述
    在这里插入图片描述


    2.键盘输入

    C语言操作设备,都是通过文件的方式,stdin对应键盘输入,stdout对应显示器输出

    fscanf可以扫描任何文件,不仅仅是键盘,scanf是fscanf的特例如图:
    在这里插入图片描述
    结果如图:
    在这里插入图片描述


    3.gets,fgets,fputs

    fgets通过文件的方式获取键盘输出,初始化str,可以从任何文件获取一个字符串,stdin代表键盘,gets是fgets的特例。
    在这里插入图片描述
    输出结果:
    在这里插入图片描述


    4.getchar,fgetc,fputc

    fgetc 可以从任何文件获取一个字符,getchar只是fgetc特例
    在这里插入图片描述
    输入qaz 输出结果:q
    在这里插入图片描述


    5.stderr

    遇到错误,就可以把错误信息写入stderr,会自动在显示器输出,stderr始终在显示器,stdout如果重定向会被写入磁盘。
    在这里插入图片描述
    输出结果:
    在这里插入图片描述


    6._getw,_putw

    在这里插入图片描述
    输出结果:
    在这里插入图片描述

    putw输出四个字符,如果输出一个字符,后续的会当做空字符处理如图:
    在这里插入图片描述
    输出结果:
    在这里插入图片描述
    putw输出错误返回值为-1


    7.打开文件fopen

    函数原型: FILE *fopen(char *name,char *mode)
    功能:按指定方式打开文件
    返回值:正常打开,为指向文件结构体的指针;打开失败,为NULL

    在这里插入图片描述


    只读模式“r”打开文件,该文件必须存在,否则打开失败
    r+,rb,rb+,rt,rt+模式打开文件,文件不存在也会失败

    W只写模式打开,文件存在则长度清0,不存在则建立文件。
    W+,wb,wb+,wt,wt+模式打开文件,文件不存在则建立文件

    access函数————确定文件或文件夹的访问权限。即,检查某个文件的存取方式,比如说是只读方式、只写方式等。如果指定的存取方式有效,则函数返回0,否则函数返回-1。


    A以附加的方式打开只写文件,若文件不存在,则建立文件,存在则在文件尾部添加数据
    A+以附加的方式打开可读写文件,不存在则建立文件,存在则写入数据到文件尾
    At二进制数据的追加,不存在则创建,只能写。
    At+读写打开一个文本文件,允许读或在文本末追加数据
    Ab二进制数据的追加,不存在则创建,只能写。


    8.关闭文件fclose()

    (1).使用fclose()函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。
    (2).如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。

    运行程序后输入数据正常关闭会写入到文件,如果程序意外关闭,没有调用fclose,文件数据丢失。

    展开全文
  • 标准输入/输出的重定向包括重定向到内存,或是重定向到文件。下面分别示例说明。 1、输入输出重定向到内存 setbuf函数具有打开和关闭缓冲机制。为了带缓冲进行I/O,参数buf必须指向一个长度为BUFSIZ(定义在stdio.h...

    标准输入/输出的重定向包括重定向到内存,或是重定向到文件。下面分别示例说明。

    1、输入输出重定向到内存

    setbuf函数具有打开和关闭缓冲机制。为了带缓冲进行I/O,参数buf必须指向一个长度为BUFSIZ(定义在stdio.h头文件中)的缓冲区。通常在此之后该流就是全缓冲的,但是如果该流与一个终端设备相关,那么某些系统也可以将其设置为行缓冲。为了关闭缓冲,可以将buf参数设置为NULL。
    用 法: void setbuf(FILE *fp, char *buf);

    示例:
    #include <stdio.h>

    char g_buffer[BUFSIZ] = {0};     //BUFSIZ为默认buffer大小,在stdio.h中定义
    void main(void)
    {
        setbuf(stdout, g_buffer);    //标准输出重定向到全局缓存区g_buffer
        printf("Hello, world!\n");
        
        setbuf(stdout, NULL);        //恢复标准输出到stdout
        
        printf("==>%s\n", g_buffer);
        return;
    }
    [root@HLZ work]# gcc main.c
    [root@HLZ work]# ./a.out
    Hello, world!
    ==>Hello, world!

    [root@HLZ work]#

    2、输入输出重定向到文件
    在C语言中,可以使用freopen将输入输出重定向到指定文件中。C语言的标准输入输出为stdin和stdout,这两个变量的数据类型为FILE *类型,也即标准输入输出操作,其本质还是文件操作。因此,
    调用 freopen("input.log","r",stdin); 将标准输入重定向到input.log。
    调用 freopen("output.log","w",stdout); 将标准输出重定向到output.log。
    当调用freopen函数时,需要引用头文件stdio.h。

    示例:
    #include <stdio.h>

    void main(void) {
        FILE *fp = NULL;
        char *filename = "output.log";
        
        fp = freopen(filename,"w+",stdout);       //标准输出重定向到文件output.log
        if (NULL == fp)
        {
            fprintf(stderr,"error redirecting stdout\n");
            return;
        }
        printf("Redirect stdout to %s\n", filename);
        fclose(fp);
        return;
    }
    [root@HLZ work]# gcc main.c
    [root@HLZ work]# ./a.out
    [root@HLZ work]# ls
    a.out  main.c  output.log
    [root@HLZ work]# cat output.log
    Redirect stdout to output.log
    [root@HLZ work]#

    当标准输出stdout被重定向到指定文件后,如何把它重定向回原来"默认"的输出设备(即显示器)呢?
    C标准库的回复是:不支持。没有任何方法可以恢复原来的输出流。
    那是否存在依赖具体平台的实现呢?存在。
    在操作系统中,命令行控制台(键盘或显示器)被视为一个文件。既然是文件,那么就有"文件名"。由于历史原因,命令行控制台文件在DOS系统和Windows操作系统中的文件名为"CON",在类Linux操作系统(如Unix、Mac OS X、Android等)中的文件名为"/dev/tty"。
    所以,可以通过 fp = freopen("/dev/tty","w",stdout); 语句恢复Linux下的"默认"输出。

     

    展开全文
  • 文件型结构体 ...要想对文件进行操作,系统需要很多控制信息,包括文件名,文件当前读写位置,缓冲区位置和大小等,为此,C语言提供了“文件型”结构来标示记录待操作文件的信息,该结构定义于...

    stdio文件型结构体

    使用printf函数时,输出设备默认为标准输出设备(一般是显示器),因此,不需要告诉printf函数显示器在哪。
    但如果想从文件中读取输入,情况就不同了,系统中有不同的磁盘,每个磁盘又有成千上万的文件,到底应该从哪个读呢?要想对文件进行操作,系统需要很多控制信息,包括文件名,文件当前读写位置,缓冲区位置和大小等,为此,C语言提供了“文件型”结构来标示记录待操作文件的信息,该结构定义于头文件stdio.h中,其形式为:

    struct _iobuf
     {
    char *_ptr;//当前缓冲区内容指针
    int   _cnt;//缓冲区还有多少个字符
    char *_base;//缓冲区的起始地址
    int   _flag;//文件流的状态,是否错误或者结束
    int   _file;//文件描述符
    int   _charbuf;//双字节缓冲,缓冲2个字节
    int   _bufsiz;//缓冲区大小
    char *_tmpfname;//临时文件名
    };
    typede f struct _iobuf FILE;
    
    1. 为从文件中读取输入而提供的“文件型”结构来标示记录待操作文件的信息,该结构定义于头文件stdio.h中,形式为:
    struct _iobuf
     {
    char *_ptr;//当前缓冲区内容指针
    int   _cnt;//缓冲区还有多少个字符
    char *_base;//缓冲区的起始地址
    int   _flag;//文件流的状态,是否错误或者结束
    int   _file;//文件描述符
    int   _charbuf;//双字节缓冲,缓冲2个字节
    int   _bufsiz;//缓冲区大小
    char *_tmpfname;//临时文件名
    };
    typede f struct _iobuf FILE;
    
    1. 上述结构体类型示例:
      在这里插入图片描述
      输出结果:
      在这里插入图片描述

    如上图,输入的12345后再次执行打印的时候会先显示1,如果后面继续执行获取ch并打印,就会从2开始每次获取打印输出一个数字,如果执行fflush则清空剩余缓冲区如图
    在这里插入图片描述
    执行fflush后再次打印则输出前一次打印的字符如图:
    在这里插入图片描述
    输入rewind将文件内部的指针重新指向开头如下图:
    在这里插入图片描述
    输出结果如图:
    在这里插入图片描述

    如下图的方法也是一样的:
    在这里插入图片描述

    输出结果:
    在这里插入图片描述

    展开全文
  • C语言标准输入流、标准输出流、标准错误输出流 ...在C语言中,在程序开始运行时,系统自动打开3个标准文件:标准输入、 标准输出、标准出错 输出。通常这3个文件都与终端相联系。因此,以前我们所用到的从终端输
  • C语言文件输入输出函数

    千次阅读 2012-10-21 10:34:13
    C语言文件输入输出函数  C语言提供了两类关于文件的函数。一类称做标准文件函数也称缓冲型文件函数, 这是ANSI标准定义的函数; 另一类叫非标准文件函数, 也称非缓冲型文件函数。这类函数最早公用于UNIX操作系统, ...
  • 标准 I/O 库(stdio)及其头文件 stdio.h 为底层 I/O 系统调用提供了一个通用的接口。这个库现在已经成为 ANSI 标准 C 的一部分。标准 I/O 库提供了许多复杂的函数用于格式化输出和扫描输入。在很多方面,你使用的...
  • 系统调用I/O函数open,write,read,都是生成文件描述符,然后对文件描述符操作,比如:STDIN_FILENO,STDOUT_FILENO标准I/O函数,则是由fopen,fgets,fputs,puts,gets,putc,getc,getchar,putchar,fprintf,fscanf等,...
  • 文件结尾,C不关心操作系统是如何检测文件结尾,C在检测到文件结尾之后返回EOF。getchar();——从输入缓冲区读取一个字符,不管字符是什么,都读取。putchar()——打印一个字符,没有换行符。注意put...
  • C语言day9 输入输出

    2020-02-08 21:55:05
    文章目录ANSI C定义了标准(不同系统通用)的I/O函数输入验证(用户交互更友好)单字符I/O getchar() putchar() (宏)有缓冲输入C语言标准) VS 无缓冲输入完全缓冲I/O VS 行缓冲I/O好多概念实际上本质上都是一段...
  • C语言 输入

    2017-08-24 20:10:31
    流 流是什么?形象的比喻——水流,文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向:可以流进,也可以流出。...1、stdin 即标准输入文件,与键盘连接。(即把键盘当做文件) 2、std
  • C 语言所使用的磁盘文件系统有两大类:一类称为缓冲文件系统,又称为标准文件系统;另一类称为非缓冲文件系统。 缓冲文件系统的特点是系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。从磁盘向内存读入...
  • C语言文件

    2019-11-18 13:07:28
    生活中的文件 我们对文件的概念已经非常熟悉了,比如常见的 Word 文档...通常把显示器称为标准输出文件,printf 就是向这个文件输出,把键盘称为标准输入文件,scanf 就是从这个文件获取数据。 常见硬件设备与文件...
  • (3)C语言本身不提供输入输出语句,输入输出操作都是由C标准函数库中的函数来实现的(注意printf和scanf并不是C语言的关键字,只是库函数的名字) (4)在使用系统库函数时,要在程序文件开头用预处理指令将有关...
  • 一个文件就是磁盘上一段命名...这三个文件分别是标准输入,标准输出和标准错误输出,对应的文件描述符分别为0,1,2.系统默认标准输入设备为键盘,标准输出设备为显示器。  写一个常用的计数程序先练练手。   #include
  • 文件类型分为:流文件和设备文件 设备文件比如:VGA接口,串口,usb口,网口,串口,这些接口都被操作系统抽象成为了文件。   当我们写程序的时候默认已经...stdin:标准输入 stdout:标准输出 stderr:标准出错
  • C 语言所使用的磁盘文件系统有两大类:一类称为缓冲文件系统,又称为标准文件系统;另一类称为非缓冲文件系统。 缓冲文件系统的特点是系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。从磁盘向...
  • 文件输入输出c语言

    2020-05-08 21:10:47
    标准采用缓冲文件系统来处理数据文件。指系统自动的在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满后才一起送到磁盘去。 文件类型指针 文件有关的...
  • 系统标准输入文件是指 A a)键盘 b)显示器 c)软盘 d)硬盘 2.若执行 fopen 函数时发生错误则函数的返回值是 B a)地址值 b)0 c)1 d)EOF 3.若要用 fopen 函数打开一个新的二进制文件该文件要既能读也能写则文件方式...
  • C语言文件概述

    千次阅读 2018-11-29 10:40:06
    C语言文件概述 ...例如,通常把显示器称为标准输出文件,printf就是向这个文件输出,把键盘称为标准输入文件,scanf就是从这个文件获取数据。 常见硬件设备与文件的对应关系 文件 ...
  • C语言文件操作

    2019-06-14 22:22:00
    1.C语言文件概述 我们对文件的概念已经非常熟悉了,比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种,最主要的作用是保存数据。... 就是向这个文件输出,把键盘称为标准输入文件,scan...
  • C语言打开文件详解

    千次阅读 多人点赞 2020-02-28 14:10:09
    C语言中操作文件之前必须先打开文件;所谓“打开文件”,就是让程序和文件建立连接的... 标准输入文件 stdin(表示键盘)、标准输出文件 stdout(表示显示器)、标准错误文件 stderr(表示显示器)是由系统打开的,...
  • C语言课程设计 C语言课程设计任务书 一题目职员信息管理系统 二目标和要求 目标要求熟练掌握C语言基础知识和编辑技能 基础掌握结构化程序设计基础思绪和方法 要求设计一个职员信息管理系统使之能提供以下功效 1应...
  • c语言入门教程之 文件操作基本常识

    千次阅读 2012-07-28 19:38:45
    由于程序中经常有大量对文件输入输出操作,它经常构成了程序的主要部分,因而C语言提供了很多输入输出的函数,它们分别用于两种类型文件输入输出系统:即由ANSI标准定义的缓冲文件(也称标准文件(流)输入输出(I/O)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 562
精华内容 224
关键字:

c语言系统标准输入文件

c语言 订阅