c语言-文件编程-库调用

二、库调用

C库函数得到文件操作是独立于具体的操作系统平台的

创建和打开-fopen

// 打开或创建文件
// 成功返回文件指针,否则返回NULL
FILE * fopen(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用于区分二进制文件和文本文件,这一点在DOS,windows系统中是有区分的,但Linux不区分二进制文件和文本文件

+表示读+写的方式打开文件

读写-fread-fwrite

// 从stream指向的文件中读取n个字段,每个字段为size字节,并将读取的数据放入ptr所指的字符数组中
// 返回实际已读取的字节数
size_t fread(void *ptr,size_t size,size_t n,FILE *stream)
// 从缓冲区ptr所指的数组中把n个字段写到stream指向的文件中,每个字段长为size个字节
// 返回实际写入的字节数
size_t fwrite(const void *ptr,size_t size,size_t n,FILE *stream)

读写字符-fgetc-fputc

// 从指定的文件中读一个字符
int fgetc(FILE *stream);
// 向指定的文件中写入一个字符
int fputc(int c,FILE *stream);

案例

// 读文件
#include<stdio.h>
#include<stdlib.h>

#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

int main(int argc,char *argv[])
{
        FILE *fd;
        if((fd=fopen(argv[1],"r"))==NULL)
        {
                printf("\ncannot open file strike any key exit!\n");
                exit(1);
        }
        char ch;
        ch=fgetc(fd);
        while(ch!=EOF)
        {
                putchar(ch);
                ch=fgetc(fd);
        }
        fclose(fd);
        return 0;
}

// 写文件
#include<stdio.h>
#include<stdlib.h>

int main(int argc,char **argv)
{
        FILE *fd;
        char ch;


        if((fd=fopen(argv[1],"wt+"))==NULL)
        {
                printf("\ncannot open file\n");
                exit(1);
        }

        printf("pls input a string\n");
        ch=getchar();
        while(ch!='\n')
        {
                fputc(ch,fd);
                ch=getchar();
        }
        fputc('\n',fd);
        printf("\n");
        fclose(fd);

        return 0;
}

格式化读写-fscanf-fprintf

// 从一个流中进行格式化输入
fscanf(FILE *stream,char *format[,argument...]);
// 格式化输出到一个流中
int fprintf(FILE *stream,char *format[,argument]);

案例

// 格式读
#include<stdio.h>
#include<stdlib.h>

int main(int argc,char **argv)
{
        int i=0;
        printf("pls input an integer\n");
        if(fscanf(stdin,"%d",&i))
        {
                printf("The integer read was:%d\n",i);
        }
        return 0;

}

// 格式写
#include<stdio.h>
#include<stdlib.h>

int main(int argc,char **argv)
{
        FILE *fd;
        int i = 10;
        double j = 1.5;
        const char * str = "fan lihao";
        char ch = '\n';
        fd = fopen(argv[1],"w+");
        fprintf(fd,"%-5d%-5lf%c",i,j,ch);
        fprintf(fd,"%-5s%c",str,ch);
        fclose(fd);
        return 0;

}

定位-fseek

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

参数

  • whence
    • SEEK_SET 文件开始
    • SEEK_CUR 当前位置
    • SEEK_END 文件结束

路径获取-getcwd

// 提供一个size大小的buffer,getcwd会把当前的路径名copy到buffer中。如果buffer太小,函数返回-1
char * getcwd(char *buffer,size_t size);

在编写程序的时候,需要得到当前路径。C库函数提供了getcwd来解决这个问题

案例

#include<stdio.h>
#include<unistd.h>

#define BUFFER_SIZE 80
int main(int argc,char **argv)
{
        char pwd_path[BUFFER_SIZE];

        printf("current path is %s\n",getcwd(pwd_path,BUFFER_SIZE));
        return 0;
}

创建目录

#include<sys/stat.h>
// 创建一个新目录
// 成功返回0,否则返回-1
int mkdir(char *dir,int mode)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卫生纸不够用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值