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);
}