【IO】(标准IO、文件IO类1)函数使用汇总(fopen、fclose、fgetc、fputc、fgets、fputs、sprintf、fscanf、freadfwrite...)

        汇总一下这些IO的函数的原型、例子、功能以及返回值,真的有些很容易混淆,记录学习,后续的函数慢慢全部汇总在这篇笔记里,以巩固自己的基础

目录

1、fopen介绍

2、fclose介绍

3、fgetc介绍

4、fputc介绍

5、fgets介绍

6、fputs介绍

7、sprintf介绍

8、snprintf介绍

9、fprintf介绍

10、fscanf介绍

11、fread介绍

12、fwrite介绍

标记:以下为文件IO部分的函数

1、open介绍

2、close介绍

3、read介绍

4、write介绍

5、lseek光标偏移函数介绍

6、dup介绍

7、dup2介绍

8、stat文件属性函数


1、fopen介绍

函数原型:

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

例子:

FILE *fp = fopen("./text.txt","r");

功能:以指定的方式打开一个给定的文件,并返回该文件的文件地址 

返回值:成功调用返回打开的文件地址,失败返回NULL,并置位错误码


2、fclose介绍

函数原型:

int fclose(FILE *stream);

例子:

fclose(fp);

功能:关闭给定的文件指针

返回值:成功返回0,失败返回EOF,并置位错误码


3、fgetc介绍

函数原型:int fgetc(FILE *stream);

例子:

char buf = 0;
buf = fgetc(fp);

功能:从指定文件中,读取一个字符

返回值:从文件中读取的第一个字符的ascii值,失败返回EOF并置位错误码

4、fputc介绍

函数原型:

int fputc(int c, FILE *stream);

例子:

fputc('H', fp);

功能:将给定的字符,写入到文件指针stream指向的文件中去

返回值:成功返回写入字符的ascii值,失败返回EOF,并置位错误码


5、fgets介绍

函数原型:

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

例子:

char buf[128] = "";
bzero(buf,  sizeof(buf));
fgets(buf, sizeof(buf);

功能:从stream所指向的文件中,最多读取size-1的字符到s中,在读取过程中,如果遇到回车或者文件结束,会结束本次读取,并且会把回车也放入容器中。在后面自动加上'\0'

返回值:成功返回容器的起始地址,失败返回NULL

6、fputs介绍

函数原型:

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

例子:

fputs("Hello world\n", fp);

功能:将给定的字符串,写入到文件中

返回值:成功返回写入的字符个数(字符串长度),失败返回EOF


7、sprintf介绍

函数原型:

int sprintf(char *str, const char *format, ...);

例子:

char buffer[50];
int num = 123456;
sprintf(buffer, "The number is: %d", num);
printf("%s\n", buffer); // 输出: The number is: 123456

功能:将格式串转换为字符串放入字符数组中

返回值:成功返回转换的字符个数,失败返回-1

8、snprintf介绍

函数原型:

int snprintf(char *str, size_t size, const char *format, ...);

例子:

char buffer[100];
int num = 12345;
snprintf(buffer, sizeof(buffer), "The number is %d", num);
printf("%s\n", buffer);    //输出The number is 12345

功能:将格式串转换为字符串放入字符数组中,该函数比sprintf更加安全,因为多了一个size的限制

返回值:成功返回转换的字符个数,失败返回-1


9、fprintf介绍

函数原型:

int fprintf(FILE *stream, const char *format, ...);

例子:

fprintf(fp ,"%d\n", num);       //向fp指向的文件中输出

功能:向指定文件中写入一个格式串

返回值:成功返回写入文件的字符实际个数,失败返回-1

10、fscanf介绍

函数原型:

int fscanf(FILE *stream, const char *format, ...);

例子:

int key = 0;
fscanf(fp, "%d", &key);      //从文件中读取一个数据
printf("key = %d\n", key);   //在终端输出从文件中取出的key值

功能:将从文件中读取一些数据,放入到程序中来

返回值:成功返回读取数据的个数,失败返回EOF并置位错误码


11、fread介绍

函数原型:

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

例子:

char rbuf[16] = "";     //要读取的内容
int res = fread(rbuf, 1, sizeof(rbuf), fp);
fwrite(rbuf, 1, res, stdout);        //向标准输出写入内容

功能:存储在 ptr 指向的内存位置。每次调取size 大小的 nmemb 个 元素。从指定的文件流 stream 中读取数据

返回值:成功返回成功读取的元素数量 nmemb。失败返回0

注意:fread并不能区分是文件结束了,还是因为出现错误了,需要使用feof或ferror来区分

12、fwrite介绍

函数原型:

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

例子:

//准备字符串写入文件
char buf[] = "hello a\n";
fwrite(buf, 1, strlen(buf), fp);    //单字符写入
fwrite(buf, strlen(buf), 1, fp);    //单字串写入

功能:将 ptr 指向的数据,总共写入size 大小的 nmemb 个 元素。写入到 stream 指定的文件流中。

返回值:成功返回成功写入的元素数量 nmemb。失败返回0


标记:以下为文件IO部分的函数


1、open介绍

​函数原型:

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

例子:

//创建一个文件描述符变量,用于存储文件描述符
int fd = -1;
if((fd = open("./file.txt", O_WRONLY|O_CREAT|O_TRUNC, 0664)) == -1)
{
    perror("open error");
    return -1;
}

printf("open success fd = %d\n", fd);

/*
参数1:要打开的文件路径
        参数2:文件打开标识
            必须包含以下三者之一:
                O_RDONLY:以只读的形式打开文件
                O_WRONLY:以只写的形式打开文件
                O_RDWR:以读写的形式打开文件
            以下的可以选择性加入,使用位或完成:
                O_CREAT:如果文件存在,就直接打开,如果文件不存在,则创建文件,此时,参数3必须要加,表示创建的文件权限
                O_TRUNC:表示清空文件内容
                O_APPEND:以追加的形式打开文件
                O_EXCL:确保打开的是不存在的文件,通常跟O_CREAT一起使用,表示本次操作必须创建新文件,如果文件存在,则open函数报错,错误码为:EEXIST
*/

功能:以指定的方式打开指定的文件

返回值:成功返回一个新的文件描述符,失败返回-1并置位错误码

2、close介绍

函数原型:

int close(int fd);

例子:

if(close(fd) == -1)
{
    perror("close fd 1");
    return -1;
}

功能:关闭文件描述符

返回值:成功返回0,失败返回-1并置位错误码


3、read介绍

函数原型:

ssize_t read(int fd, void *buf, size_t count);

例子:

char temp;    //用于接受数据的容器
read(fd, &temp, sizeof(temp));

功能:从指定的文件中读取count个字节的数据到buf中

返回值:成功返回读取字节的个数,失败返回-1并置位错误码

4、write介绍

函数原型:

ssize_t write(int fd, const void *buf, size_t count);

例子:

char s[3] = {'1','2','3'};
write(fd, s, sizeof(s));

功能:向指定的文件fd中,写入指定的信息,从s里面读取sizeof(s)个数据

返回值:成功返回写入字符的个数,失败返回-1并置位错误码


5、lseek光标偏移函数介绍

函数原型:

off_t lseek(int fd, off_t offset, int whence);

例子:

lseek(fd, 2, SEEK_SET);      //光标从头开始向右偏移2
/*
参数1:文件描述符
参数2:偏移量
       >0:向后偏移
       =0:不偏移
       <0:向前偏移
    参数3:偏移起始位置
       SEEK_SET:文件开头
       SEEK_END:文件结尾
       SEEK_CUR:文件当前位置
*/

功能:移动文件的光标

返回值:成功返回文件光标当前的位置,失败返回-1并置位错误码


6、dup介绍

函数原型:

int dup(int oldfd);

例子:

//生成新的fd2文件描述符,但是与旧的文件描述符共享同一个光标
int fd2 = dup(fd1);
printf("fd1 = %d, fd2 = %d\n", fd1, fd2);  //3   4

功能:贝旧文件描述符,生成新的文件描述符

返回值:新文件描述符

7、dup2介绍

函数原型:

int dup2(int oldfd, int newfd);

例子:

//定义变量存储文件描述符,fd1和fd2还是原来的文件描述符,但是现在会共享同一个光标
dup2(fd1 ,fd2);    //原本的就是fd1=4  fd2=3
printf("fd1 = %d, fd2 = %d\n", fd1, fd2);  //fd1=4    fd2=3

功能:拷贝旧文件描述符,放入新文件描述符中,如果新文件描述符之前已经打开,则在拷贝时,默认将其关闭

返回值:成功返回新文件描述符,失败返回-1并置位错误码


8、stat文件属性函数

函数原型:

int stat(const char *pathname, struct stat *statbuf);

例子:

//参数1:要获取的文件名
//参数2:文件属性结构体指针,是一个地址传递,需要传递一个结构体变量的地址,通过函数调用结束后,该变量中就有内容了

#include<myhead.h>

int main(int argc, const char *argv[])
{
    //判断外部传来的文件
    if(argc != 2)
    {
        printf("input file error\n");
        return -1;
    }

    //定义接受文件的属性结构体变量
    struct stat sb;                 //stat buf
    //调用函数,获取文件状态
    if(stat(argv[1], &sb) == -1)
    {
        perror("stat error");
        return -1;
    }

    //程序执行至此,sb中就记录了传入的文件的信息
    //输出文件类型
    switch(sb.st_mode & S_IFMT)
    {
    case S_IFSOCK:
        {
            printf("套接字文件\t");
        }
        break;
    case S_IFLNK:
        {
            printf("链接文件\t");
        }
        break;
    case S_IFREG:
        {
            printf("普通文件\t");
        }
        break;
    case S_IFBLK:
        {
            printf("块设备文件\t");
        }
        break;
    case S_IFDIR:
        {
            printf("目录文件\t");
        }
        break;
    case S_IFCHR:
        {
            printf("字符设备文件\t");
        }
        break;
    case S_IFIFO:
        {
            printf("管道文件\t");
        }
        break;
    }

    //输出文件权限
    printf("%#o\t", sb.st_mode&0777);
    //输出文件大小
    printf("%ld\t", sb.st_size);
    //输出文件inode号
    printf("%ld\n", sb.st_ino);

    return 0;
}

功能:获取给定的文件状态属性

返回值:成功返回0,失败返回-1并置位错误码

注意点:1、使用st_mode & S_IFMT可以得到文件的类型

                2、使用st_mode & 0777可以得到文件的权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值