設備->內存(輸入操作)
內存->設備(輸出操作)
ANSI C提供的標准I/O庫稱為高級I/O,通常也稱為帶緩沖的I/O
通常也稱為不帶緩沖的I/O
2. 文件描述符:fd
3.文件描述符與文件指針相互轉換
可以通過以下兩個函數實現:
#include <stdio.h>
int fileno(FILE *stream)
測試程序:
#include <stdlib.h><stdio.h> main(測試結果:
測試結果一:采用默認的umask值
測試結果二:重新設置umask值
為了重新利用文件描述符,用close()系統調用釋放打開的文件描述符
函數原型:
#include <unistd.h>
int close(int fd);
函數參數:
-fd :要關閉的文件的文件描述符
返回值
如果出現錯誤,返回-1
調用成功返回0
注:若沒有顯示調用close(),當程序退出時也會關閉文件
為了維持與早期的UNIX系統的向後兼容性,Linux也提供可選的創建文件的系統調用,它稱為creat()。現代的linux內核很少采用creat創建文件,因為open可以完成創建功能
函數原型:
int creat(const char *path, mode_t mode);
參數
path :文件的名稱,可以包含(絕對和相對)路徑
mode: 用來規定對該文件的所有者,文件的用戶組及系 統中其他用戶的訪問權限
返回值
打開成功,返回文件描述符;
打開失敗,返回-1
在UNIX的早期版本中,open()系統調用僅僅存在兩個參數的形式。如文件不存在,它就不能打開這些文件。文件的創建則由單獨的系統調用creat()完成。在Linux及所有UNIX的近代版本中,creat()系統調用是多余的。
creat()調用
fd = creat(file, mode);
完全等價於近代的open()調用
fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, mode);