LINUX中文件的访问方式
-LINUX系统调用
-C语言库函数
系统调用:
1.创建文件:
int creat(char *filename,mode_t mode)
filename:创建的文件名,可以是路径加文件名,默认当前路径
mode:创建模式 常见的有:S_IRUSR S_IWUSR S_IXUSR S_IRWXU
用对应数字表示为:可读(4) 、可写(2)、可执行(1) 如表示文件的属性为0755,则是对于文件所有者的权限是可读可写可执行
2.打开文件:
int open(char *pathname,int flags,mode_t mode)//当flags有O_CREAT时,要打开的文件不存在时,可以默认创建文件,故需要添加mode参数
int open(char *pathname,int flags)//打开存在的文件
pathname:要打开的文件名 不带路径则在当前路径找文件
flags:打开标志 有: O_RDONLY O_WRONLY O_RDWR O_APPEND O_CREAT O_NOBLOCK(无阻塞方式打开)
故flags含有O_CREAT时必须采用三个参数的open函数
3.关闭文件:
int close(int fd)
fd:文件描述符(打开文件时函数的返回值,为无符整型)
4.读文件:
int read(int fd,const void *buf,size_t length)
从文件描述符所指的文件读取length字节的数据到buf所指定的缓冲区中,返回实际读取的字节数
5.写文件
int write(int fd,const void *buf,size_t length)
把length字节的数据的数据从buf所指的缓冲区中写到文件描述符fd所指向的文件中,返回实际写入的字节数
6.定位文件
int lseek(int fd,offset_t offset ,int whence)
将文件读写指针相对whence移动offset个字节,操作成功时,返回文件指针相对于文件头的位置(因此文件的长度:lseek(fd,0,SEEK_END))
whence :
SEEK_SET(0):相对于文件开头
SEEK_CUR(1):相对于当前文件指针位置
SEEK_END(2):相对于文件结尾
offset <0 向前移动 offset>0 向后移动
7.文件访问判断
int access(const char *pathname,int mode)
pathename:文件名称
mode:要判断的访问权限 有:R_OK(可读) W_OK(可写) X_OK(可执行) F_OK(文件存在)
测试成功时 返回0 否则返回 -1
(完)
C语言库函数方式(独立于平台):
区别与LINUX中的文件描述符,C中采用文件缓冲区FILE,文件指针FILE*
1.打开文件
FILE *fopen(const char* filename,const char *mode)
filename:文件名(含路径,默认当前)
mode:打开模式 常见的: r rb w wb a ab r+ r+b rb+ w w+ wb+ w+b a+ a+b ab+
b用于区分二进制文件与文本文件,但是linux中无这种区分 因此 r==rb
2.关闭文件(流)
int fclose(FILE * stream)
关闭一个流,调用fclose会将缓冲区的剩余数据输出到磁盘文件,并释放文件指针和相关的缓冲区。
如果流关闭成功fclose返回0,否则返回EOF(-1)
3.读文件
size_t fread(void *ptr,size_t size,size_t n,FILE *stream)
从stream所指的的文件中读取n个字段,每个字段为size个字节,并将读取的字节写入ptr所指向的字符数组中,返回实际已经读取的字节数
4.写文件
size_t fwrite(const void *ptr,size_t size,size_t n,FILE* stream)
从缓冲区ptr所指的字符数组中把n个字段写入stream所指向的文件中,每个字段长为size个字节,返回实际写入的字节数
5.读字符
int fgetc(FILE* stream)
从指定文件中读取一个字符,返回读取的字符,返回EOF则到达文件尾
6.写字符
int fputc(char ch,FILE * stream)
向指定文件写入字符ch
7.格式化读文件
int fscanf(FILE* stream,char *format[,argument... ]) (stdin终端读入)
从流中格式化输入 fscanf遇到空格或换行自动结束,返回输入的个数
8.格式化写文件
int f'printf(FILE * stream,char *format【,argument....】)
格式化输出到一个流中 (stdout终端输出)
9.定位文件
int fseek(FILE *stream,long offset,int whence)
offset、whence:等同于lseek
10.获取文件路径
char *getcwd(char *buffer,size_t size)
提供一个size大小的buffer,getcwd会将当前路径拷贝到buffer中,如果buffer太小,则返回-1。
11.创建目录
int mkdir(char *dir,int mode)
返回值为0时创建成功,-1表示出错。