1.創建
int create(const char *filename,mode_t mode);
mode指定新建文件的讀取權限
2.打開
int open(const char* pathname,int flags); int open(const char* pathname,int flags,mode_t mode);
pathname是我們要打開的文件名(包含路徑名稱,缺省認爲在當前路徑下面)flags可以是下表的形式:
O_RDONLY 只讀打開 O_WRONLY 只寫打開 O_RDWR 讀寫方式打開 (前三個只能三選1) O_APPEND 追加方式打開
O_CREAT 創建一個文件 O_NOBLOCK 以非阻塞方式打開 O_TRUNC 如果文件已經存在,則刪除文件內容
mode訪問權限:
標誌表示太麻煩,用5個數字表示 第一位表示設置用戶ID ,第二位表示設置組ID , 第三位用戶自己的權限位 , 第四位表示組的權限 , 第五位 其他人權限。
1 執行 2 寫 4 讀 (可組合) eg . 10 705
1(設置用戶ID) ,0(不設置組ID),7(1+2+4,讀寫執行),0(沒有權限),5(讀執行)
3.讀寫
int read(int fd,const void *buf,size_t length);
int write(int fd,const void *buf,size_t length);
參數buf爲指向緩衝區的指針,length爲緩衝區的大小(以字節爲單位)。函數read()現從文件描述符fd所指定的文件中讀取length個字節到buf緩衝區中,返回實際讀取的字節數。write()過程反過來。
4.定位
int lseek(int fd,offset_t offset,int whence);
lseek()將文件讀寫指針相對whence移動offset個字節。操作成功時,返回文件指針相對於文件頭的位置。whence可以取以下值:
SEEK_SET:相對文件開頭 SEEK_CUR:相對文件讀寫指針的當前位置 SEEK_END:相對文件末尾
eg. lseek(fd,0,seek_end); 返回值是文件的長度。
5.關閉
int close(int fd);
例子:
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#define LENGTH 100
main()
{
int fd,len;
char str[LENGTH];
/*創建打開一個文件*/
fd=open("hello.txt",O_CREAT|O_RDWR,00700);
if(fd){
/*向文件寫入"hello world"*/
write(fd,"hello world",strlen("hello world"));
/*關閉文件*/
close(fd);
}
/*打開文件*/
fd=open("hello.txt",O_RDWR);
/*讀取文件*/
len=read=(fd,str,LENGTH);
str[len]='\0';
printf("%s\n,str");
/*關閉文件*/
close(fd);
}