C语言文件操作笔记
#include<io.h>
write()写文件函数 write(文件句柄,缓冲区地址,缓冲区字节长度<最大65534>);
_write()写文件函数
read()读文件函数
_read()读文件函数
open()打开文件进行读写的函数 文件句柄=open("文件名",打开模式|打开模式);
……
#include<fcntl.h>
访问权限、创建文件模式、非阻塞标记
函数说明:
参数pathname 指向要打开的文件路径
参数flags 定义以什么权限打开要修改的文件,flash分为单独权限操作和组合权限操作,具体如下
flags单独使用:
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR 以读写方式打开文件
O_RDONLY | O_BINARY 只读而且是二进制文件(|意思为按位或)
flags利用OR(|)运算符组合使用
O_CREAT 若欲打开的文件不存在则自动建立该文件。
O_EXCL or O_CREAT 检查文件是否存在,若不存在则建立该文件
O_CREAT or O_EXCL 如果打开的文件为符号连接,则会打开文件失败。
O_NOCTTY 如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机。
O_TRUNC 若文件存在并且以可写的方式打开时,文件中的内容将被清空。
O_APPEND 当读写文件时会从文件尾开始移动,将后面要写入的数据会以附加的方式加入到文件后面。
O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。
O_NDELAY 与 O_NONBLOCK 相同。
O_SYNC 以同步的方式打开文件。
O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接,则会令打开文件失败。
O_DIRECTORY 如果参数pathname 所指的文件并非为一目录,则会令打开文件失败。
O_NOATIME 从linux 2.6.8内核开始,读文件不更新文件最后访问时间
read函数
read函数(读取文件)
read函数可以读取文件。读取文件指从某一个已打开地文件中,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用。
使用格式如下:
number = read(handle, buffer ,n) ;
例:rtn=read(fh,buf,buf_size-1)
上述read调用函数中,各个参数的定义如下:
handle: 这是一个已经打开的文件句柄,表示从这个文件句柄所代表的文件读取数据。(无所谓数据类型?整型?)
buffer: 指缓冲区,即读取的数据会被放到这个缓冲区中去。(缓冲区是一个数组)
n: 表示调用一次read操作,应该读多少数量的字符。
number:表示系统实际所读取的字符数量。
int main(int argc,char *argv[])
argc是命令行总的参数个数;
argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数。命令行后面跟的用户输入的参数。
char *argv[]是一个字符数组,其大小是int argc,数组里每个元素代表一个参数;
main(int argc,char *argv[ ])
1.argc为整数
2.argv为指针的指针(可理解为:char **argv or: char *argv[] or: char argv[][] ,argv是一个指针数组)
注:main()括号内是固定的写法。
open函数和fopen函数
open函数
int open(const char*pathname,int flags);
int open(const char*pathname,int flags,mode_t mode);
参数说明:
1.pathname
要打开或创建的目标文件
2.flags
打开文件时,可以传入多个参数选项,用下面的
一个或者多个常量进行“或”运算,构成falgs
参数:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR: 读,写打开
这三个常量,必须制定一个且只能指定一个
O_CREAT: 若文件不存在,则创建它,需要使用mode选项。来指明新文件的访问权限
O_APPEND: 追加写,如果文件已经有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容
fopen函数
FILE * fopen(const char * path,const char * mode);
参数说明:
参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
wx 创建文本文件,只允许写入数据。
wbx 创建一个二进制文件,只允许写入数据。
w+x 创建一个文本文件,允许读写。
wb+x 创建一个二进制文件,允许读写。
w+bx 和“wb+x”相同
以x结尾的模式为独占模式,文件已存在或者无法创建(一般是路径不正确)都会导致fopen失败。文件以操作系统支持的独占模式打开。
二者区别
以可写的方式fopen一个文件时,如果文件不存在则会自动创建,而open一个文件时必须明确O_CREAT才会创建文件,否则文件不存在就出错返回
calloc()动态分配存储函数
void *calloc(unsigned int n,unsigned int size);
(1)调用格式:calloc(n,size);
(2)功能:在内存分配一个n倍size字节的存储区。调用结果为新分配的存储区的首地址,是一个void类型指针
(3)与malloc函数的区别:malloc 函数是动态分配一段存储空间,而calloc函数是动态分配连续的存储空间。
p=(int *)malloc(sizeof(int))
C语言中定义指针变量(p)后,必须给指针变量进行相应的地址分配,之后才可以使用指针变量,否则就会出现程序异常。
p=(int *)malloc(sizeof(int))---->让系统为p选择一个内存空间
当如果不给p分配内存地址,它就会变成“野指针”,进而导致程序崩溃。