linux学习记录 文件io

cd .文件io

man fopen

FILE *fopen(const char *path, const char *mode);

例句:

第一个参数:表示文件路径

绝对路径:根目录 \

相对路径:当前的目录  .

第二个参数:表示操作文件的模式 

DESCRIPTION 函数说明

RETURN VALUE 返回值:

失败:NULL

成功:!=NULL

走的时候要关闭文件(关闭了数据才会保存到文件中)

int fcolse(FILE*fp);

参数是文件指针

例句:

参数:文件指针

//快慢:寄存器 缓存 内存  (缓存,公交车去市区)

操作文件和数据的时候是在内存中操作,不关闭的话是数据还在缓存中,还未来得及写入文件中,会导致数据丢失,就像申请空间不释放会导致内存泄露

//4声明argv (int argc,char **argv)这两个参数什么意思

//argc:表示接受参数个数

//argv:表示接受参数内容

//7定义文件指针

//8 argv[1]是你执行的时候要./a.out +文件名

有文件才会打开成功,自己创建1.txt

//9也可以指定文件名,第一个参数就是路径

./a.out的时候就不用加文件名了

//16关闭文件 fp是文件指针

//11perror()是显示打印错误的具体原因函数

perror(“fopen”)

例句:

这是没有2.txt这个文件

参数是可以是fopen

那么fwrite呢?

fread呢?

参数mode字符串代表着流形态。

mode有下列几种形态字符串:

(字符串 :单引号'r'字符,加上双引号“r”就是字符串,双引号引起来“任何字符”的都是字符串,中文字符也是)

对文件操作(读和写)

fread fwirte

fread(void  *ptr,  size_t  size,size_t nmemb, FILE *stream);

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

例句:

第一个参数:读取数据空间地址

?从文件指针*stream第四个参数获取的数据存储到本地所给的参数*ptr

就是第四个参数读取的数据保存到第一个参数里面

第二个参数就是数据的类型第三个就是数据的个数。所以我们要定义一个*ptr 数据空间(地址)来存放数据和读取 (保存文件的内容)

如果txt文件里面有字母和数字abc123怎么读取,统一看成字符‘a’‘b’'1' '2'

第二个参数:数据类型 或者块的大小

第三个参数:数据个数  或者块的个数

第四个参数:文件指针:操作的文件(fp)

返回值:

   成功:表示读取数据的个数

   失败:0 或者小于numb的个数,第三个参数,用buf的时候没有读满就不算一个数据就小于

char buf[1024]  每次读1k 0-1023

1024 放满才算一个数据

第二个参数  第三个参数

1024            1

512              2

256              4

1                  1024

buffer缓存

r  文件不存在:不会创建,打开失败

    文件存在:

     读:从文件开头读

     写:不可以写

r+ 文件不存在:不会创建,打开失败

     文件存在:

       读:从头读

       写:从头写

w  文件存在:会创建

     文件不存在

        读:不可以读

        写:清空的写

w+文件不存在:会创建

     文件存在

         读:可以读

         写:清空的写

a    文件不存在:会创建

      文件存在

       读:不可以读

       写:追加的写

a+  文件不存在:会创建

       文件存在

        读:文件开头读

        写:追加的写

验证代码,除了w+的读之外都适用

w+的读:w+的写已经是清空文件了,那怎么读呢,如果不能读的话跟w有什么区别,那这个w+就没有存在的意义了,用上面的函数验证出来w+是不能读的,怎么去验证w+的读呢

既然w+写已经清空内容了,那么我们把数据先从代码放入文件中,(从txt写进去的话读写的话还是被删啊)然后代码直接读就行了。

创建一个新的7.txt文件(w+会自己创建)

当前读写位置是2?

为什么我代码里面只传一个A它给我搞了两个?待解决

反正是验证完毕了,w+是可以读的

读和写:

         按字符操作

             fgetc();

             fputc();

         按行操作

             fgets();

             fputs();

         按缓冲操作

             fread();

             fwrite();

         按格式操作

             fscanf();

             fprintf();

int fgetc(FILE *stream);

char *fgets(char *s, int size, FILE *stream);

int fputc(int c, FILE *stream);

int fputs(const char *s, FILE *stream);

偏移:fseek()

int  fseek(FILE  *stream,  long   offset,   int whence);

例句:

第一个参数:文件指针

第二个参数:偏移量(-1,0,1可以是负数,就是左移,是相当第三个参数偏移位置而言的)

第三个参数:偏移位置

SEEK_SET:表示文件开头

SEEK_CUR:表示当前位置

SEEK_END:表示文件结尾

返回值:成功:0

              失败:-1

验证

fread和fwrite不是有那个块吗,用这个buf[1024]写的代码研究一下

char buf[1024]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值