對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.c
fan@fan:~/arm$ ./app
fdfe
fdfe
fefefef
fefefef
//輸入一行,馬上輸出一行,也就是按照原樣輸出
===========================================================================
使用重定向來執行
fan@fan:~/arm$ ./app> data
fefe
fdadfdf
adfdfef
//輸入的字串並不是輸出到終端,而是輸出到data檔案中。
==========================================================================
fan@fan:~/arm$ ./app <stdout.c >data
fan@fan:~/arm$
//這一句相當於把stdout.c複製到data中去
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
STDOUT_FILENO和STDIN_FILENO在預設的情況下是終端,
使用ctrl+D來輸入檔案結束符
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/xiaoxi2xin/archive/2010/04/24/5524769.aspx
相關文章
- STDIN_FILENO與STDIN的區別
- STDIN_FILENO的作用及與stdin 的區別
- 2.2.php://stdin&php://stdoutPHP
- 使用LINUX dup2 複製檔案描述符到標準輸出STDOUT_FILENOLinux
- linux程式設計裡有這麼一句if (lseek(STDIN_FILENO, 0, SEEK_CUR) == -1 ),請問是de意思?Linux程式設計
- java學習中對類和物件的理解Java物件
- MySQL的double write和Oracle對比學習MySqlOracle
- perl DBI DBD和java 的JDBC對比學習JavaJDBC
- 對比學習Vue和微信小程式Vue微信小程式
- MySQL和Oracle對比學習之事務MySqlOracle
- Scala學習(四)---對映和元組
- 處理stdin輸入的字串指令字串
- gzip: stdin:unexpected end of file
- 對深度學習的認識深度學習
- Java NIO學習系列四:NIO和IO對比Java
- 如何面對JAVA架構師,和學習方法。Java架構
- ubuntu 啟動錯誤stdin:is not ttyUbuntu
- 我對組隊學習的看法
- Linux| |對於UDP的學習LinuxUDP
- Android UI學習 - Tab的學習和使用AndroidUI
- 機械學習和深度學習的區別深度學習
- C#和TS/JS的對比學習02:函式與方法C#JS函式
- 對深拷貝和淺拷貝的一些學習心得
- TensorFlow和Caffe、MXNet、Keras等深度學習框架的對比Keras深度學習框架
- CSS的學習和心得CSS
- Blazor和Vue對比學習(基礎1.4):事件和子傳父BlazorVue事件
- 與MSSQL對比學習MYSQL的心得MySql
- 對學習程式語言的的小感想
- 對checkpoint的理解一文的學習
- Objective-C學習筆記(二十八)——對alloc和init的理解Object筆記
- Vue 學習 Ref shallowRef triggerRef customRef (Ref 和 Reactive的對比)VueReact
- Blazor和Vue對比學習(基礎1.3):屬性和父子傳值BlazorVue
- 陶哲軒對數學學習的一些建議
- 將python stdout設定為不緩衝Python
- reduce()方法的學習和整理
- 學習態度和學習計劃
- 反對中國留學生學習AI和量子技術,美國要幹啥?AI
- Blazor和Vue對比學習(基礎1.5):雙向繫結BlazorVue