日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux和Windows下使用printf的差别

發布時間:2024/1/23 linux 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux和Windows下使用printf的差别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【1.Linux系統下】

一般而言,大家都知道printf是帶有行緩沖的函數,printf把打印的消息先輸出到行緩沖區,在以下幾種情況下:1.程序結束時調用exit(0)/return;2.遇到回車\n,3.調用fflush函數;4.緩沖區滿。會自動刷新緩沖區,緩沖區的內容顯示到標準輸出上。

比如在LINUX系統下,執行如下程序:

#include <stdio.h> int main(void) {printf("hello");while(1);return 0; }

使用GCC編譯后執行,發現shell中并沒有輸出hello,這是因為LINUX系統下,printf把“hello”輸出到緩沖區,而此時沒有發生緩沖區刷新的4種情況,因此shell中并不會看到hello。但是如果使用printf("hello\n");或者在printf后使用fflush(stdout);那么執行時在shell中就會看到hello輸出。

【2.WINDOWS系統下】
同樣這段程序,如果在Windows下編譯運行(使用VC++6.0),會發現控制臺中馬上看到hello的輸出。分析原因發現,Windows下stdout沒有提供緩沖(不知道這個原因是否確切)。比如執行如下程序:
?

  • #include?<stdio.h>
  • int?main(void)
  • {
  • ????printf("hello\n");
  • ????printf("buf size is %d\n",stdout->_bufsiz);
  • ????while(1);
  • ????return 0;
  • }
  • 可以看到stdout的緩沖區大小為0,這也就意味著,stdout是沒有緩沖區的,因此printf輸出到stdout,不存在緩沖,這個和LINUX系統中對printf處理的機制是不一樣的。

    在Windows下,可以使用setbuf函數(https://msdn.microsoft.com/en-us/library/86cebhfs.aspx)來設置緩沖區的方式和大小。
    ?

  • #include?<stdio.h>
  • char buf[512];
  • int?main(void)
  • {
  • ????setvbuf(stdout,?buf,?_IOLBF,?512);
  • ????printf("hello");????
  • ????while(1);
  • ????return 0;
  • }
  • 使用setbuf函數,把stdout設置為行緩沖,大小為512字節。在VC++6.0中運行該程序,發現不會在控制臺中輸出hello,如果把緩沖區設置為2個字節大小:setvbuf(stdout, buf, _IOLBF, 2);此時程序的輸出為hell,he輸出到緩沖區,緩沖區滿,刷新緩沖區,控制臺看到he,ll輸出到緩沖區,緩沖區滿,再次刷新,控制臺看到ll,o輸出到緩沖區,此時緩沖區未滿,因此看不到o在控制臺輸出。

    使用如下程序,查看緩沖區的大小,輸出結果為512字節

  • #include?<stdio.h>
  • char buf[512];
  • int?main(void)
  • {
  • ????setvbuf(stdout,?buf,?_IOLBF,?512);
  • ????printf("hello\n");
  • ????printf("%d\n",stdout->_bufsiz);
  • ????fflush(stdout);
  • ????while(1);
  • ????return 0;
  • }

  • 此外,在Windows設置緩沖區的情況下,printf中使用回車符\n是不會刷新緩沖區的。對上述程序,把fflush函數注釋掉,在VC++6.0中重新執行,控制臺中看不到輸出。

    總結

    以上是生活随笔為你收集整理的Linux和Windows下使用printf的差别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。