1. 程式人生 > >詳解stdin,stdout,stderr

詳解stdin,stdout,stderr

     我們在寫C程式時經常遇到printf(),fprintf(),perror(),這些東西到底有什麼作用。說到這不得不提及stdin,stdout,stderr。想想,我們在用C去寫檔案時的操作,File *fp=fopen(),這個fp就是我們向系統申請的,相當於一通往檔案的通道。其實,stdin,stdout,stderr就是這個fp,不過他是隨著計算機系統的開啟預設開啟的,其中0就是stdin,表示輸入流,指從鍵盤輸入,1代表stdout,2代表stderr,1,2預設是顯示器。printf()其實就是向stdout中輸出,等同於fprintf(stdout,“****”),perror()其實就是向stderr中輸出,相當於fprintf(stderr,“***”),那到底stdout,和stderr有什麼區別和作用呢?

    我們在寫程式時用printf()是為了我們能監控我們的程式執行狀況,或者是說debug,如果我們的程式是一直執行,不停下來,我們不可能時刻盯著螢幕去看程式輸出,這時我們就可以用檔案重定向。將輸出到一檔案中,我們以後就可以看這檔案就行。舉個例子,test.c

<pre class="cpp" name="code">#include<stdio.h>

int main()
{
     printf("stdout Helo World!!\n"); 

     return 0;
}

    編譯過後,我們./test > test.txt(預設是將stdout裡的內容重定向到檔案中),這樣就把test程式輸出的內容輸出到test.txt檔案中。還有一種更明晰的寫法./test  1>test.txt,這裡的1就代表stdout。說到這你應該知道stderr該怎樣處理了。再舉個例子test.c:

#include<stdio.h>

int main()
{
     printf("Stdout Helo World!!\n");
     fprintf(stdout,"Stdout Hello World!!\n");
     perror("Stderr Hello World!!\n");
     fprintf(stderr,"Stderr Hello World!!\n");
     
     return 0;
}

   編譯過後,./test,螢幕上是四條輸出,如果./test > test.ext ,結果是螢幕上輸出兩條Stderr Hello World!!,Stdout Helo World!!在檔案test.txt中,基於上面說的很容易理解現在的結果,於是我們可以隨便處理我們想要的輸出,例如:

./test 1>testout.txt 2>testerr.txt,我們將stdout輸出到檔案testout.txt中,將stderr輸出到testerr.txt檔案中;

./test 1>testout.txt ,將stdout輸出到檔案testout.txt 中,stderr輸出到螢幕上;

./test 2>testerr.txt,將stderr輸出到檔案testerr.txt中,stdout輸出到螢幕上;

./test > test.txt 2>&1,這是將stdout和stderr重定向到同一檔案test.txt檔案中。

    如果我們不想看到輸出內容,既不想在螢幕上看見,也不想重定向到檔案中,別擔心,萬能的linux有解決辦法,./test > /dev/zero 2>&1,這樣就看不到任何輸出了。

   Note:stderr,和stdout還有重要一點區別,stderr是沒有緩衝的,他立即輸出,而stdout預設是行緩衝,也就是它遇到‘\n’,才向外輸出內容,如果你想stdout也實時輸出內容,那就在輸出語句後加上fflush(stdout),這樣就能達到實時輸出的效果。

相關推薦

C語言中的stdinstdoutstderr

我們在寫C程式時經常遇到printf(),fprintf(),perror(),這些東西到底有什麼作用。說到這不得不提及stdin,stdout,stderr。想想,我們在用C去寫檔案時的操作,File *fp=fopen(),這個fp就是我們向系統申請的,相當於一通

stdinstdoutstderr

     我們在寫C程式時經常遇到printf(),fprintf(),perror(),這些東西到底有什麼作用。說到這不得不提及stdin,stdout,stderr。想想,我們在用C去寫檔案時的操作,File *fp=fopen(),這個fp就是我們向系統申請的,相當於

shell基礎02 標準文件描述符STDINSTDOUTSTDERR和輸入輸出重定向

stdin isp pen blank input open 日誌文件 重定向 分開 文件描述符 縮寫 描述

python sys中的stdinstdoutstderr

#testing stdout   >>> print 'Hello World!' #該語句會在標準輸出的螢幕上列印 Hello World!   Hello&nbs

Python模塊以及import本質獲得文件當前路徑os.path.abspath獲得文件的父目錄os.path.dirname放到系統變量的第一位sys.path.insert(0,x)

alt 獲取 詳解 nbsp spa 絕對路徑 解釋 系統 port 模塊介紹 1、定義: 模塊:用來從邏輯上組織python代碼(變量,函數,類,邏輯:實現一個功能),本質就是.py結尾的python文件(文件名:test.py,對應的模塊名:test) 包:用來從邏輯上

守護進程及創建daemon()使用

blog zomb 錯誤信息 數據庫 net == span 孤兒進程 null 一,守護進程概述   Linux Daemon(守護進程)是運行在後臺的一種特殊進程。它獨立於控制終端並且周期性地執行某種任務或等待處理某些發生的事件。它不需要用戶輸入就能運行而 且提供某種

Linux基本常用命令之ls(含datecal)

Linux基礎【1】顯示日期的指令:date示例:(1)#date +%Y/%m/%d結果:2018/02/27(2)#date +%H:%M結果:10:48【2】顯示日歷的指令:cal格式:cal [month] [year]示例:(1)#cal 2 2018(2)#cal 13 2018結果:cal:il

UX術語幸運飛艇源碼下載:任務流用戶流流程圖以及其它全新術語

希望 演示 重要 職位 flow 重新 生成 img 所有 用戶幸運飛艇源碼下載【大神源碼論壇】dsluntan.com 【布丁源碼論壇】budingbbs.com 企娥3393756370 體驗擁有一長串專業的術語和可交付內容。當在線查看UX相關職位描述時,所羅列的這類

NGINX源碼安裝配置(./configure)最全解析

unzip roo without rpc服務 所有 googl 版本 並且 大文件 NGINX ./configure詳解 在"./configure"配置中,"--with"表示啟用模塊,也就是說這些模塊在編譯時不會自動構建&qu

萬向鎖尤拉旋轉角slam中萬向鎖的理解

第一步:先花10分鐘看一下這個下面是的視訊,絕對有用! http://v.youku.com/v_show/id_XNzkyOTIyMTI=.html 萬向鎖含義:當兩個旋轉軸重合時,導致只剩了2個旋轉,2個旋轉不能將所有情況進行描述。 第二步: 看視訊,如果還不理解,請拿出手機,跟

tensorflow-tf.nn.conv2d()tf.nn.max_pool()

 tf.nn.conv2d() 函式來計算卷積,weights 作為濾波器,[1, 2, 2, 1] 作為 strides。TensorFlow 對每一個 input 維度使用一個單獨的 stride 引數,[batch, input_

mybatis的createretrievedeleteupdate返回值。

首先是select User user = new User(); user.setName("l2"); user.setPassword("444"); int i = userMapper.addUser(user);

Redis - SpringBoot整合RedisRedisTemplate和註解兩種方式的使用

本文主要講 Redis 的使用,如何與 SpringBoot 專案整合,如何使用註解方式和 RedisTemplate 方式實現快取。最後會給一個用 Redis 實現分散式鎖,用在秒殺系統中的案例。 更多 Redis 的實際運用場景請關注開源專案 coderiver 專案地址:github.com/cac

深度學習 --- 模擬退火演算法(Simulated Annealing SA)

上一節我們深入探討了,Hopfield神經網路的性質,介紹了吸引子和其他的一些性質,而且引出了偽吸引子,因為偽吸引子的存在導致Hopfield神經網路正確率下降,因此本節致力於解決偽吸引子的存在。在講解方法之前我們需要再次理解一些什麼是偽吸引子,他到底是如何產生的? 簡單來說說就是網路動態轉

舉例java例項變數靜態變數區域性變數

public class Variable { public int m,n;//對子類可見的例項變數 private double k;//只對本類可見的例項變數,一般情況下,設為私有,通過使用訪問修飾符來被子類使用。 public static String P;//靜態變數(

>>堆堆疊佇列

1.堆 堆就是一棵完全二叉樹 具有以下特性 在程式執行時分配記憶體(動態分配記憶體) 應用程式在執行時向作業系統申請空間 2.棧(堆疊) 運算受限制的單鏈表,只能從一個方向操作 像是一個桶,只能從開口方向放入或者拿出資料,開口方向為棧頂,不開口方向棧底

前端模組化開發規範的終結者Webpack(純乾貨不套路)

可謂集CommonJS、AMD、ES6等多種特性於一身,靈活、易用、高擴充套件性、效能優越。 核心配置 以下是webpack的幾個核心配置節: 節點 說明 entry 指定要打包的檔案

哨兵2資料‘檔名’(吐血整體僅供參考)

哨兵2資料檔名詳解 Sentinel-2 Level-1C products: (2016年12月6日之後生成的Sentinel-2 Level-1C產品的新格式命名約定) .zip解壓後為.SAFE檔案 S2A_MSIL1C_20170105T013442_

HBase基本資料操作【完整版絕對精品】

引言 之前詳細寫了一篇HBase過濾器的文章,今天把基礎的表和資料相關操作補上。 本文件參考最新(截止2014年7月16日)的官方Ref Guide、Developer API編寫。 所有程式碼均基於“hbase 0.96.2-hadoop2”版本編寫,均實測通過。 歡迎轉載

Kotlin:第一章基本語法

一,簡介 Kotlin是JetBrains開發的基於JVM的語言,Kotlin可以編譯成Java位元組碼,也可以編譯成JavaScript,方便在沒有JVM的裝置上執行。 特點:比Java更安全,能夠靜態檢測常見的陷阱。如:引用空指標。程式碼更易表現,書寫方便,便於閱讀