系统调用-文件访问
文件创建
Int creat(const char *filename,mode_t mode)
Filename:要创建的文件名(包含路径,缺省为当前路径)
Mode:创建模式。
常见模式:
S_IRUSR 可读 1
S_IWUSR 可写 2
S_IXUSR 可执行 4
S_IRWUS 可读可写可执行
文件描述
文件描述符本质是一个非负整数。当打开一个文件时,该整数由系统来分配。文件描述符的范围为0-OPEN_MAX即允许每个进程同时大力OPEN_MAX个文件
打开文件
Int open(const char*pathname,int flags)
Int open(const char*pathname,int flats,mode_t mode)
Pathname:要打开的文件名(包含路径,缺省为当前路径)
Flags:打开标志
常见的打开标志
O_RDONLY 只读方式打开
O_WRONLY 只写方式打开
O_RDWR 读写方式打开
O_APPEDN 追加方式打开
O_CREAT 创建一个文件
O_NOBLOCK 非阻塞方式打开
如果使用了O_CREATE标志,当打开文件不存在时,会创建这个文件。必须使用函数
Int open(const char *pathname,int flags,mode_t mode);
这时需要指定mode来表示文件的访问权限。
文件关闭
当我们操作完文件以后,需要关闭文件
Int close(int fd)
Fd:文件描述符。
读文件
Int read(int fd ,const void *buf,size_t length)
功能:
从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取到的字节数。
写文件
Int write (int fd ,const void *buf,size_t length)
功能:
把length个字节从buf指向的缓冲区中写到文件描述符所指向的文件中,返回值位数实际写到缓冲区的字节数。
定位
Int lseek(int fd ,offset_t offset,int whence)
功能:
将文件读写指针相对whence移动offset个字节,操作成功时,返回文件指针相对于文件头的位置。
Whence可使用下述值
SEEK_SET: 相对文件开头
SEEK_CURRENT: 相对于文件读写指针的当前位置
SEK_END: 相对文件末尾
Offset可取负值,表示向前移动。
访问判断
有时我们需要判断文件是否可以进行某种操作(读,写等),这时可以使用access函数
Int access(const char* pathname,intmode)
Pathname:文件名称
Mode:要判断的访问权限,可以取以下值或者是他们的组合值
R_OK:文件可读
W_OK:文件可写
X_OK:文件可执行
F_OK:文件存在。
返回值:当我们测试成功时,函数返回0,否则如果一个条件不符时,返回-1。
库函数-文件访问
C库函数的文件操作是独立于具体的操作系统平台的。
创建和打开
FILE *fileopen(const char * filename,const char *mode)
Filename:
打开的文件名(包含路径,缺省为当前路径)
Mode:
打开模式
常见打开模式
r , rb 只读方式打开
w ,wb 只写方式打开,如果文件不存在,则创建该文件
a ,ab 追加方式打开,如果文件不存在,则创建该文件
r+ ,r+b,rb+ 读写方式打开
w+ ,w+b,wh+ 读写方式打开,如果文件不存在,则创建该文件
a+ ,a+b,ab++ 读和追加方式打开,如果文件不存在,则创建该文件
B用于区分二进制文件和文本文件,linux不区分二进制文件和文本文件
读文件
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)
功能:
从缓冲区ptr所指的数组中把n个字段写到stream指向的文件中,每个字段长为size字节,返回实际写入的字节数。
读字符
Int fgetc(FILE *stream)
从指定的文件读取一个字节。
写字符
Int fputc(int c,FILE *stream)
向指定文件中写入一个字符。
格式化读
Fscanf(FILE *stream , char format[,argument..])
从一个流中进行格式化输入。
格式化写
Int fprintf(FILE *stream,char * format[,argument..])
格式化输出到一个流中。
定位
Int fseek(FILE *stream,long offset,int whence)
路径获取
在程序编写时,有时候需要得到当前路径。C库函数提供了getcwd来解决这个问题。
Char *getwcd(char *buffer,size_t size)
我们提供一个size大小的buffer,getcwd会把当前的路径名copy到buffer中,如果buffer太小,函数会返回-1.
创建目录
Int mkdir(char *dir ,int mode)
功能:创建一个新目录
返回值 :0表示成功,-1表示出错。