Linux下文件编程

一、系统调用方式访问文件

1、创建文件:int creat(const char *filename,mode_t mode)

filename为要创建的文件名(包含路径,默认为当前路径);

mode为创建的文件属性,0无任何权限,1可执行,2可写,4可读,6可读可写;

要创建一个用户可读、可写、可执行,但是组没有权限,其他人可以读、可以执行的文件,并设置用户ID位。那么,我们应该使用的模式是1(设置用户ID)、0(不设置组ID)、7(1+2+4,读、写、执行)、0(没有权限)、5(1+4,读、执行)即10705: 

2、打开文件:

int open(const char *pathname,int flags)

int open(const char *pathname,int flags,mode_t mode)

open函数有两个表示形式。pathname为要打开的文件名(包含路径,缺省为当前路径);

flags为打开文件的标志;

O_RDONLY以只读方式打开,O_WRONLY以只写的当时打开,O_RDWR以读写方式打开,O_APPEND以追加的方式打开

O_CREAT创建一个文件,O_EXEC如果使用O_CREAT而已经存在一个文件,会发生错误;

如果使用O_CREAT标志,则要使用第二个open函数,同时要指定mode属性;表示如果open打开的pathname不存在,则创建一个文件为mode属性的文件,mode指定文件的权限;

3、关闭:int close(int fd)

fd为文件描述符,文件描述符本身就是一个非负整数,在0---OPEN_MAX之中,OPEN_MAX表示一个线程同时能打开的最大文件数,现在一般的OPEN_MAX值为:1024

在open函数中,成功打开一个文件的函数返回值就是这个文件的描述符,close函数可通过这个描述符来关闭文件;

4、读写文件:

int read(int fd,const void *buf,size_t length)

int write(int fd,const void *buf,size_t length)

buf为缓冲区,length为读写的字节大小;表示在fd指定的文件中读取length个字节大小的长度,保存在buf的缓冲区中;

函数的返回值为读写的实际字节大小。

5、文件定位:int lseek(int fd,offset_t offset,int whence)

lseek()将文件读写指针相对于whence移动offen个字节,返回值为指针相对于文件头的位置;

whence的属性有:SEEK_SET相对于文件头,SEEK_CUR相对于读写指针当前位置,SEEK_END相对于文件末

6、访问判断:int access(const char *pathname,int mode)

二、库函数访问文件

1、创建和打开:FILE *fopen(const char *pathname,const char *mode)

r以只读方式打开,w以只写方式打开,如果文件不存在,则创建文件,否则文件被截断,a以追加的方式打开,如果文件不存在,则创建文件,r+以读写方式打开,w+以读写方式打开,如果文件不存在,则创建文件,否则文件被截断,a+以读和追加的方式打开,如果不存在,则创建新文件;

2、读写

size_t fread(void *ptr,size_t size,size_t n, FILE *stream)

从stream中读n个段为size字节,并放在ptr所指的数组中,返回值是实际读取的字节数;

size_t fwrite(const void *ptr,size_t size,size_t n,FILE *stream)

3、读写字符:

int fgetc(FILE *stream)

int fputc(int c,FILE *stream)

fscanf(FILE *stream,char *format[,argument....])格式化输入

int fprintf(FILE *stream,char *format[,argument....])

4、文件定位:int fseek(FILE *stream,long offset,int whence)

whence的属性有:SEEK_SET相对于文件头,SEEK_CUR相对于读写指针当前位置,SEEK_END相对于文件末

5、获取当前路径:char *getcwd(char *buffer,size_t size)

提供size大小的buffer,把当前路径保存到buffer中;

6、创建目录:int mkdir(char *dir,int mode)

返回值:0表示成功,1表示失败;

上一篇:FPGA设计中遇到的奇葩问题之“芯片也要看出身”(三)


下一篇:gcc程序编译和gdb程序调试的基本选项