rrobber

导航

C语言文件操作笔记

#include<io.h>

write()写文件函数  write(文件句柄,缓冲区地址,缓冲区字节长度<最大65534>);

_write()写文件函数

read()读文件函数

_read()读文件函数

open()打开文件进行读写的函数  文件句柄=open("文件名",打开模式|打开模式);

……

#include<fcntl.h>

访问权限、创建文件模式、非阻塞标记

O_RDONLY
O_WRONLY
O_RDWR
O_NONBLOCK

函数说明:

参数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分配内存地址,它就会变成“野指针”,进而导致程序崩溃。

 

posted on 2022-05-06 09:22  rrobber  阅读(117)  评论(0编辑  收藏  举报