文件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裡介紹的。