基于文件指针的文件操作

这篇博客介绍了在Linux环境下使用文件指针进行文件操作的方法,包括fopen、fclose、fread、fwrite和fseek等函数的使用。特别强调了Linux下不区分二进制模式,并详细解释了'ab+'模式的含义。示例代码演示了如何追加内容到文件、读取文件及字符串拼接功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件的打开、关闭:fopen 、fclose

bzero()

fopen()   

在vs下有以下模式:

r   ( rb) :打开一个文件,读取

a  ( ab) :打开一个文件,从尾部写入。只能写,不能读。

w (wb) :创建一个文件,写入(如果文件存在,就会覆盖)

r+   ( rb+) :打开一个文件,可读可写。光标在开头。再写会覆盖后面的内容。

a+  ( ab+) :打开一个文件,可读可写。光标在开头。(自己试一下!!!)

w+ (wb+) :创建一个文件,可读可写。

但是:在linux下,不区分二进制模式还是文本模式,只有以下六种模式:

r b   :

a b   : 

wb   :

r b+  :

a b+ :

wb+ :

#include <stdio.h>

#include <stdlib.h>

#include <strings.h>                                  //bzero()的头函数

#include <string.h>

void main(int argc,char* argv[]){

        if(argc!=2){

                printf("error args\n");

                return;

        }

        FILE* fp;

        fp=fopen(argv[1],"ab+");                      //打开文件   

        if(NULL==fp){

                perror("fopen");

                return;

        }

        char buf[128];

        bzero(buf,sizeof(buf));                         // 初始化     

        int ret;

        strcpy(buf,"how are you");

        ret=fwrite(buf,sizeof(char),strlen(buf),fp);   //从buf向fp写内容,写的单位是 char这么长,写多少个!

        if(ret <=0){

                perror("fwrite");

        }

        ret=fseek(fp,-3,SEEK_CUR);                   //相对于当前位置偏移三个字节

        if(ret!=0){

                perror("fseek");

        }

        bzero(buf,sizeof(buf));

        ret=fread(buf,sizeof(char),2,fp);

        if(ret <=0){

                perror("fread1");

        }

        printf("fread buf=%s\n",buf);       

        strcpy(buf,"hello");       

        ret=fwrite(buf,sizeof(char),strlen(buf),fp);   //

        if(ret <=0){

                perror("fwrite1");

        }

        //printf("buf=%s\n",buf);

}

bzero()   

#include <strings.h>

char buf[128];

bzero(buf,sizeof(buf));                      //把里面的内容初始化为0.比memset()少写几个参数。

#include <stdio.h>

fopen();

fclose();

fread();

fwrite();

printf();

scanf()

fprintf();

fscanf();

sprintf();

sscanf();

fseek();

在linux下写r和rb是一样的。

fread 

fwrite

ab+    读的时候从头开始读。

          写的时候从尾巴开始写。

     如果中间发生了偏移,那么也是从最后开始写。

sprintf()        //字符串拼接函数。

char a[10]="hello";

char b[10]="world"

char c[128]=

sprintf();

在linux下如何将数字转换成字符串:在linux下没有itoa()这个函数,只有atoi()函数。

char buf[20];

int a=1234;

sprintf(buf,"%d",a);

printf("%s\n",buf);     //此时输出的就是1234。把1234 传到了buffer 而buffer为char *

sscanf()      //从一个字符串中往外读。

查看程序执行的返回值    echo $?

-1 显示255.

一般正确返回0 。

ctrl +d 结束输入的信号。

ctrl +c 中断当前进程。

linux下没有fflush();需要自己写。

scanf()可以忽略空格和'\n'

chmod(); 

chmod 就是用接口写的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值