LINUX文件编程基础知识

来源:互联网 发布:井冈山大学网络客户端 编辑:程序博客网 时间:2024/05/17 06:35

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表示出错。