歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

深入剖析Linux I/O操作與標准I/O操作區別與聯系

文件I/O:open creat close lseek read write dup dup2 sync fsync fcntl ioctl

所有函數都是針對文件描述符。

所有的都是原子操作,這個在多進程間共享文件時就顯得尤為重要。

int open(const char *pathname,int flag,... /* mode_t mode*/) ;

Samples: open(pathname,O_RDWR | O_CREAT | O_TRUNC, mode);

int creat(const char *pathname,mode_t mode);

int close(int filedes);

off_t lseek(int filedes, off_t offset, int whence);

ssize_t read(int filedes, void *buf, size_t nbytes);

ssize_t write(int filedes, const void *buf, size_t nbytes);

標准I/O:FILE,

標准庫都是圍繞流進行的,(教訓:fflush就是一種通過刷新緩沖讓緩沖中的數據被讀或者寫)。

我現在憑記憶可以羅列的就只有:FILE結構體, fopen,fread,fwrite,fclose,fgetc,fputc,fgets,fputs,fflush.

標准IO分為全緩沖,行緩沖,不帶緩沖。

全緩沖:填滿緩沖後才執行IO操作。

行緩沖:輸入或輸出中遇到換行符時,標准庫執行IO操作。

對於行緩沖有兩個限制1)行的長度是有限制的,如果一行滿了,即使沒有換行符也會執行IO操作。

2)任何時候,從一個不帶緩沖的流,或者一個行緩沖流得到輸入數據,就會造成沖洗所有緩沖流。【此處,或者很誤解】。

不帶緩沖:字符輸入輸出。通常標准出錯流stderr也是不帶緩沖的。

高級I/O:

關於高級I/O,有太多的內容,非阻塞I/O,記錄鎖,STREAMS,I/O多路轉換(select,pselect, poll ,epoll),異步I/O(System V ,BSD),readv,writev,readn,writen.存儲映射I/O等。這些是Unix系統高級編程2裡介紹的。

Copyright © Linux教程網 All Rights Reserved