linux 函数 标准输出_linux 输出函数warning - CSDN
  • 获取进程的标准输出

    2019-05-23 22:11:13
    起因是我想看到spring项目的标准输出,注意不是日志输出是标准输出,我想到了spring就是一个java进程,怎么能够获取到这个进程的标准输出呢?首先找到进程号,然后获取进程的标准输出linux一切到可以看作文件,/...

    起因是我想看到spring项目的标准输出,注意不是日志输出是标准输出,我想到了spring就是一个java进程,怎么能够获取到这个进程的标准输出呢?首先找到进程号,然后获取进程的标准输出。linux一切到可以看作文件,/proc/pid/fd/1 就是pid进程的标准输出。

    0描述符 标准输入
    1描述符 标注输出
    2描述符 标注错误输出

    文件描述符指向了管道或者文件或者socket
    在这里插入图片描述

    标准输出指向了终端
    在这里插入图片描述

    展开全文
  • linux系统下,printf函数是行缓冲式的输出,当printf遇到\n时,或者缓冲区满时,才会将缓冲区里的内容刷新到标准输出(stdout). 因此, printf("p"); 等语句的显示不能立刻显示在屏幕上,但是printf("p\n&...

    在linux系统下,printf函数是行缓冲式的输出,当printf遇到\n时,或者缓冲区满时,才会将缓冲区里的内容刷新到标准输出(stdout).

    因此, printf("p"); 等语句的显示不能立刻显示在屏幕上,但是printf("p\n"); 可以.

    为了解决这个问题可以通过:fflush(stdout);解决,即变成:
    printf("p");
    fflush(stdout);
    问题可以得到解决.

    相对printf,使用fprintf的好处

    printf函数的接口如下所示:
    int printf( const char *format [, argument]... );
    fprintf函数的接口如下所示:
    int fprintf( FILE *streamconst char *format [, argument ]...);
    从接口可以看出,使用printf函数会更方便些,少了一个函数参数。在通常情况下,的确是这样的。但在输出信息比较多,而且输出的信息有可能需要分类的化,使用fprintf的好处就体现出来了。
    printf函数使用的输出设备是标准输出设,即stdout。在使用fprintf函数时,我们可以在第一个参数使用stdout或stderr进行输出信息分类。虽然stdout和stderr在正常情况下都指向标准输出设备,但通常程序运行时的命令行参数,可以分别控制stdout和stderr指向不同的设备或文件。这样,就可以达到对输出信息进行分类控制了。如下面的代码段所示:

    test.c
    //一般输出信息
    extern char *info;
    extern char *errinfo;
    fprintf(stdout, "%s", info);
    //特别关注的输出信息
    fprintf(stderr, "%s", errinfo);

    这样,在运行程序时,可以使用如下的命令行:
    test 1&>1.txt 2&>2.txt
    这样,一般输出信息可以存储到1.txt文件中,特别关注的输出信息可以存储到2.txt文件中。

    展开全文
  • 代码如下: int fd=open("test.txt",O_RDWR|O_CREAT); printf("\n");... //先用dup2(...)函数复制stdout文件描述符1,然后复制回去 dup2(1,stdout_cp); close(1); ...

    代码如下:

        int fd=open("test.txt",O_RDWR|O_CREAT);
        printf("\n");		//回车不可少。只有按下回车后,数据才被送往键盘缓冲区,形成输入流
        int stdout_cp=100;	//先用dup2(...)函数复制stdout文件描述符1,然后复制回去
        dup2(1,stdout_cp);
        close(1);			//关闭stdout
        int fd2=dup(fd);	//dup会复制fd文件描述符到当前未打开的最小描述符,即1
        printf(.....);		//printf输出的内容直接输入文件描述符fd指向的文件,即test.txt
        close(fd2);			//等于close(1)
        dup2(stdout_cp,1);	//把指向stdout的文件描述符复制回去
        printf(.....);		//又可以向屏幕输出了
    

    关闭标准输出并直接输出到文件中:顶替值为1的文件描述符,让1指向文件
    重新打开标准输出:先用dup2(…)函数复制stdout文件描述符1,然后复制回去

    展开全文
  • linux下关闭标准输出,然后重新打开的方法: 有两种方法: 1. 通过freopen函数来实现;   #include int main() { printf("Hello world! 1\n"); fclose(stdout); printf("hello world! 2\n"); ...

    linux下关闭标准输出,然后重新打开的方法:

    有两种方法:

    1. 通过freopen函数来实现;

     

    #include <stdio.h>
    
    int main()
    {
            printf("Hello world! 1\n");
            fclose(stdout);
            printf("hello world! 2\n");
            freopen("/dev/pts/3", "w", stdout);
            printf("hello world! 3\n");
    }
    

    输出结果:

    Hello world! 1
    hello world! 3

    这种方法通过需要在提前知道终端tty的名称(我这里是"/dev/pts/3"),才能实现。可以在终端使用tty命令来查看。如果你打开了另一个终端并用tty查看并替换到程序中,你会发现打印的内容并不是在你执行程序的终端打印出来,而是在你新打开的终端打印出来。

     

    2. 通过使用dup2函数来备份标准输入输出。

     

    #include <stdio.h>
    #include <unistd.h>
    
    int main()
    {
            int count = 10;
            int fd = 10;
            printf("hello world! 1\n");
            dup2(1,fd);
            close(1);
            printf("hello world! 2\n");
            fflush(stdout);
            dup2(fd,1);
            printf("hello world 3\n");
            return 0;
    }
    

    输出结果:

    hello world! 1
    hello world 3

    注意freopen是对文件指针类型操作,dup2函数是对文件描述符操作。

    linux下标准输入输出标准错误流是(是FILE * 类型):stdin stdout stderr

    unix默认为标准I/O打开了三个文件描述符(是非负整数),STDIN_FILENO, STDOUT_FILENO,STDERR_FILENO分别对应的值是0,1,2

     

     

     

    展开全文
  • 管道pipe:管道是linux系统提供给进程通信的一种方式,它的本质是一个缓冲区,可以想象成一个管道,A进程从管道一端输入数据,B进程在另... 标准输出/错误:程序运行过程中输出到屏幕的程序运行信息就是标准输出...

    管道pipe

    管道是linux系统提供给进程通信的一种方式,它的本质是一个缓冲区,可以想象成一个管道,A进程从管道一端输入数据,B进程在另一端接收数据,当管道缓存满的时候阻塞A进程,直到有进程将管道数据读出,此时唤醒A进程。

     管道的缓存容量是系统规定的,在终端下输入:ulimit -a    如下图pipe size即为管道容量。 


    标准输出/错误:

    程序运行过程中输出到屏幕的程序运行信息就是标准输出,相应的程序输出的错误信息就是标准错误输出,重定向('>')的时候默认重定向标准输出,对于标准错误该怎么定向呢?他们之间的区别用简单的例子区别:

    执行ls命令成功,得到以下输出,即标准输出


    将标准输出重定向到log文件:


    执行一个错误的ls命令:


    此时log文件并没有错误信息:


    在linux系统中:

    0代表标准输入流

    1代表标准输出流

    2代表标准输出流

    ls >log 等于ls 1>log

    依然执行上面错误的命令 ls test ,即当前目录不存在test文件,此时会有标准错误输出,


    因此,可以自由决定标准输出/错误怎么输出,如:

    >log 2>&1     标准输出到log,标准错误定向到标准输出,即log文件,等于>&log。

    >log 2>wrong     标准输出重定向到log,标准错误重定向到wrong问件。

    >&log      标准输出/错误都输出到log文件中。

    展开全文
  • stdin 标准输入流,标准的输入设备默认键盘stdout 标准输出流,标准的输出设备默认屏幕stderr 标准错误流,只有程序出错时才会执行的流程printf(“abc”) 是对fprintf(stdout,”abc”)函数的封装.把“ ”内的内容...
  • 客户端需要发送信息到服务端,客户端就通过fgets函数从标准输入输入字符,服务端在通过fputs将字符输出到标准输出 fgets: #include char *fgets(char *s, int size, FILE *stream); fgets() reads in at most ...
  • linux c 使用dup2函数输出重定向到文件 --execl
  • Linux Shell函数返回值

    2012-09-11 11:25:40
    Shell函数返回值,一般有3种方式:return,argv,echo1) return 语句shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回。示例:#!/bin/bash - function mytest() { echo "arg1 = $1" if [ $1 =...
  • 当我们在使用scanf()函数读取标准输入时,其结果并不总是正确。有时,为了防止缓冲区数据对结果的影响,我们需要清空标准缓冲区。首先我们得知道在LINUX标准I/O为我们提供了那几中类型的缓冲区。 标准I/O库提供...
  • linux open函数详解

    2018-06-15 10:28:15
    原文地址:https://blog.csdn.net/archyli/article/details/78937937一、open函数用来干什么open函数在...二、open函数的定义和参数我们首先来看下open函数Linux下的定义#include &lt;sys/types.h&gt; #i...
  • 当在Linux系统中打开一个文件时,标准输入、标准输出、标准错误输出是默认打开的 指定重定向 文件file_redirect、file_stdout(必须是已经存在的) 为了验证是否实验成功可以事先在文件中写入一句话:Successful ...
  • Linux对文件的操作有两种方式文件IO函数(系统调用)和标准IO库函数调用。系统调用是最直接的方式,库函数调用最终也是通过系统调用实现的。可认为库函数调用是对系统调出于效率考虑而做出的优化。 二者区别: ...
  • linux系统下,printf函数是行缓冲式的输出,当printf遇到\n时,或者缓冲区满时,才会将缓冲区里的内容刷新到标准输出(stdout). 因此, printf("p"); 等语句的显示不能立刻显示在屏幕上,但是printf("p\n"); 可以. ...
  • 我们知道printf()函数有buff缓冲区,但是这个缓冲区是怎么工作的呢。 其实我们程序有scanf或gets等这种输入函数的时候,有没有发现,当我们输入字符串等数据在窗口的时候,并不会立马输出我们的字符,需要我们继续...
  • 方法1: #include #include #include #include #include int main() { fflush(stdout); setvbuf(stdout,NULL,_IONBF,0); printf("test stdout\n");... int save_fd = dup(STDOUT_FILE
  • 由open函数返回的文件描述符一定是最小的未用描述符数字,这一点被很多应用程序用来在标准输入、标准输出或标准出错上打开一个新的文件。 例如,一个应用程序可以先关闭标准输出(通常是文件描述符1),然后...
  • ========================================================================================================================... getchar从标准输入的缓冲区读字符,backspace根本进不了缓冲区。所以应该使用无缓冲
  • 这些函数包括prinf以及其他的一些向文件流中写入数据的函数以及scanf和其他的一些函数从文件流中读取数据的函数. 参数format字符串可包含下列三种字符类型: 1. 一般文本, 伴随直接输出. 2. ASCII控制...
1 2 3 4 5 ... 20
收藏数 150,387
精华内容 60,154
关键字:

linux 函数 标准输出