文件io简单了解

文章详细阐述了Linux中文件IO的两类操作——系统IO和标准IO,包括它们的区别、优缺点。同时介绍了文件描述符的概念,以及如何通过open、read、write、close等系统函数进行文件操作。此外,还提到了Linux的七种文件类型和文件属性的判断方法。
摘要由CSDN通过智能技术生成

 一般在开发中,不会讲大量数据保存在代码中,而是存储在文件中,程序运行时,对文件的数据进行读取和写入,对硬件来说,操作系统也会将其看做文件,只不过需要操作对应的驱动文件来实现数据的写入和读取。

(1)文件io的分类:

一个是系统io、另一个是标准io

系统io:

标准io:

 系统io直接操作数据,标准io将数据打包给io缓冲区后再操作。

 (2)系统io和标准io的区别

首先都能够打开文件、读取文件、写入文件、关闭文件、文件相关操作

区别:函数名不同,头文件不同;

相同点:两种操作方式都适用于操作文件的;

不同点

系统io:在操作系统层面,由系统提供,可直接调用系统中的库的函数接口;

              不带io缓冲区的操作;

标准io:在库函数层面,有标准C库提供,可直接调用标准库函数的函数接口;

            带io缓冲区的操作;

关系:标准io函数,其本质也是调用系统io,只不过对系统io进一步进行封装;

(3)优缺点

系统io:由系统提供,有基本的操作函数。(简洁精练)

优点:简洁单一、稳定,不需要消耗过多的系统资源;

缺点:对功能性要求较高的程序,操作更加繁琐;

标准io:由标准C库提供,拥有多样化的操作函数(功能多样)

优点:复杂操作更为方便,函数接口更加多样化;

缺点:消耗系统资源更多,不适用于简单的功能;

2.Linux中一共存在七种文件类型

名称缩写符号创建命令代码打开方式代码关闭方式
普通文件-touchopen/fopenclose/fclose
目录文件dmkdiropendirclose
网络文件ssocketsocketclose
链接文件llnopen/fopenclose/fclose
管道文件pmkfifoopen/fopenclose/fclose
字符设备文件cmknod驱动的接口 openclose
块设备文件bmknod驱动的接口 open close

备注:设备文件可以被创建,但是如果没有对应的硬件或者驱动文件的支持,那么它只是单纯的占用内存,不起任何作用,也无法做任何操作。

3.文件描述符

 在操作文件的时候,并不是直接操作文件,而是给文件一个标号,或者叫引用对象,取名叫做文件描述符,在虚拟文件系统中,有一个文件类型的结构体,其中有一个fd array

1024是系统默认的文件操作安全范围,可以修改。

ulimit -n 更改之后的值

 文件描述符中,几个特殊的标号:

第一个下标为0的文件描述符,默认为键盘输入,对应的宏为STDIN;

第二个下标为1的文件描述符,默认为屏幕输出,对应的宏为STDOUT;

第三个下标为2的文件描述符,默认为屏幕输出,对应的宏为STDERR;

对应的函数分别为:scanf()   printf()   perror()

程序运行时,第一个打开的文件描述符号从3开始

4.相关的文件操作函数接口

系统函数 man 2,标准库函数 man 3

第一组:系统io操作函数

1.新建和打开文件的函数 open

该函数有两个功能:打开文件/创建文件

//头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

//函数原型
int open(const char *pathname, int flags);

//函数参数
const char *pathname //文件对象的访问路径
int flags            //

O_RDONLY    //只读
O_WRONLY    //只写
O_RDWR      //读写权限
O_CREAT     //创建权限
O_EXCL      //和新建权限配合,如果文件存在就返回错误信息,用来检测文件是否存在
O_TRUNC     //和新建权限配合,如果文件存在就将文件原本内容全部丢弃,文件大小为0
O_NOCTTY    //默认
O_APPEND    //文件内容追加写入,主要用来写文件(保护之前的内容不被覆盖)

返回值:
    成功:返回一个新的文件描述符;
    失败:-1;

文件描述符:默认起始为3,一般最大申请1023,总数1024;

另一种open的创建

//函数原型
int open(const char *pathname, int flags, mode_t mode);

//函数参数
const char *pathname //文件对象的访问路径
int flags            //文件对象的操作权限
mode_t mode          //设置文件的使用权限(宏对应的八进制)

O_RDONLY    //只读
O_WRONLY    //只写
O_RDWR      //读写权限
O_CREAT     //创建权限
O_EXCL      //和新建权限配合,如果文件存在就返回错误信息,用来检测文件是否存在
O_TRUNC     //和新建权限配合,如果文件存在就将文件原本内容全部丢弃,文件大小为0
O_NOCTTY    //默认
O_APPEND    //文件内容追加写入,主要用来写文件(保护之前的内容不被覆盖)

返回值:
    成功:返回一个新的文件描述符;
    失败:-1;

文件描述符:默认起始为3,一般最大申请1023,总数1024;

相关宏(八进制)
创建者:
        S_IRWXU  00700 user  (file  owner) has read, write, and execute permission
        S_IRUSR  00400 user has read permission
        S_IWUSR  00200 user has write permission
        S_IXUSR  00100 user has execute permission
同组用户:
        S_IRWXG  00070 group has read, write, and execute permission
        S_IRGRP  00040 group has read permission
        S_IWGRP  00020 group has write permission
        S_IXGRP  00010 group has execute permission
其他用户:
        S_IRWXO  00007 others have read, write, and execute permission
        S_IROTH  00004 others have read permission
        S_IWOTH  00002 others have write permission
        S_IXOTH  00001 others have execute permission

2.读取文件内容 read

//头文件
#include <unistd.h>

//函数原型
ssize_t read(int fd, void *buf, size_t count);

//函数参数
int fd, 		//由open函数返回的文件描述符对象
void *buf 	    //读取数据存放的缓冲区
size_t count	//计算读取字节的大小(字节)想要读取的字节数

返回值:
    成功:返回实际读取的内容字节数
    失败:-1

3.将数据内容写入文件 write

//头文件
#include <unistd.h>

//函数原型
ssize_t write(int fd, const void *buf, size_t count);

//函数参数
int fd;        //需要写入的文件描述符
const void *buf;    //写入的数据来自该缓冲区
size_t count        //控制写入的字节数大小(字节)

返回值:
    成功:返回写入内容的字节数
    失败:-1

4.关闭文件函数 close

//头文件
#include <unistd.h>

//函数原型
int close(int fd);

//函数参数
int fd;        //需要关闭的文件对象

注意:如果创建了文件,并向文件中写入了数据,如果没有关闭close,则数据可能无法保存。

5.文件的偏移(光标)占位符的移动 lseek

//头文件
#include <sys/types.h>
#include <unistd.h>

//函数原型
off_t lseek(int fd, off_t offset,int whence)

//函数参数
int fd;        //文件操作对象(也就是生成的文件描述符)
off_t offset;  //要偏移的字节数
int whence;    //偏移的基准点

偏移的基准点:
    SEEK_SET    //文件的开头位置
    SEEK_CUR    //文件的当前位置
    SEEK_END    //文件的末位位置

返回值:
    成功:返回偏移过的字节数
    失败:-1

注意:可以让偏移的基准点配合,可以计算出文件内容的字节数大小

6.文件的属性 stat

//头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

//函数原型
int stat(const char *pathname, struct stat *buf);

//函数原型
const char *pathname;    //需要查看的文件的路径
struct stat *buf;        //文件属性的结构体指针

文件属性结构体成员(封装)
struct stat
{
    dev_t     st_dev;         /* 文件存储的设备号 */ 系统自动分配
    ino_t     st_ino;         /* 索引号 文件的身份证 */
    mode_t    st_mode;        /* 文件的类型和权限 */
    nlink_t   st_nlink;       /* 硬链接数 */
    uid_t     st_uid;         /* 创建者用户ID */
    gid_t     st_gid;         /* 同组用户ID */
    dev_t     st_rdev;        /* 特殊设备ID */ 驱动文件
    off_t     st_size;        /* 文件大小 */
    blksize_t st_blksize;     /* 文件所用数据块的数目 */
    blkcnt_t  st_blocks;      /* 写入数据建议值 */
    struct timespec st_atim;  /* 最后访问文件的时间 */
    struct timespec st_mtim;  /* 最后修改文件的时间 */
    struct timespec st_ctim;  /* 最后修改属性的时间 */
}

返回值:
    成功:0
    失败:-1

st_mode 可以帮助我们判断文件的类型

文件类型:

S_ISREG(m)  is it a regular file // 普通文件

S_ISDIR(m)  directory // 目录文件

S_ISCHR(m)  character device // 字符设备文件

S_ISBLK(m)  block device // 块设备文件

S_ISFIFO(m) FIFO (named pipe有名管道) // 管道文件

S_ISLNK(m)  symbolic link // 链接文件

S_ISSOCK(m) socket  // 网络文件

 应用方式:

stat(pathname, &sb);   // 先获得文件属性结构体指针

if (S_ISREG(sb.st_mode))

{        // 然后使用带参宏去判断成员st_mode,返回为真,则为普通文件

        /* Handle regular file */

}

 除了使用带参宏,还可以使用以下的内容去判断文件的类型

S_IFMT    0170000   bit mask for the file type bit field  总权限文件掩码

           S_IFSOCK   0140000   socket          网络文件

           S_IFLNK    0120000   symbolic link 链接文件

           S_IFREG    0100000   regular file     普通文件

           S_IFBLK    0060000   block device   块设备文件

           S_IFDIR    0040000   directory        目录文件

           S_IFCHR    0020000   character device   字符设备文件

           S_IFIFO    0010000   FIFO       管道文件

 应用方式:

stat(pathname, &sb); // 先获得文件属性结构体

if ((sb.st_mode & S_IFMT) == S_IFREG)

{        // 做位与运算,如果结果和某一个宏相同即得到文件类型

        /* Handle regular file */

}

获取文件的权限:     

S_ISUID     04000   set-user-ID bit         // 创建者ID

           S_ISGID     02000   set-group-ID bit (see below) // 同组用户ID

           S_ISVTX     01000   sticky bit (see below) // 其他用户ID

创建者-这个组的权限

           S_IRWXU     00700   owner has read, write, and execute permission

           S_IRUSR     00400   owner has read permission

           S_IWUSR     00200   owner has write permission

           S_IXUSR     00100   owner has execute permission

同组用户

           S_IRWXG     00070   group has read, write, and execute permission

           S_IRGRP     00040   group has read permission

           S_IWGRP     00020   group has write permission

           S_IXGRP     00010   group has execute permission

其他用户           

            S_IRWXO     00007   others (not in group) have read,  write,  and

                               execute permission

           S_IROTH     00004   others have read permission

           S_IWOTH     00002   others have write permission

           S_IXOTH     00001   others have execute permission

 7.判断文件是否存在 access

//头文件
#include <unistd.h>

//函数原型
int access(const char *pathname, int mode)

//函数参数
const char *pathname;      //需要判断的文件的路径
int mode;                  //附加条件:R_OK 读权限 W_OK 写权限 X_OK 执行权限 F_OK 文件是否存在

返回值:
    成功:0
    失败:-1

8.文件重定向 dup 重定向文件描述符

//头文件
#include <unistd.h>

//函数原型
int dup(int oldfd);
int dup2(int oldfd, int newfd);

//函数参数
int oldfd;    //需要重定向的旧文件描述符
int newfd;    //指向新的重定向文件描述符

返回值:
    成功:返回新的文件描述符(说明已改变文件描述符指向)
    失败:返回-1

此外:
函数dup和dup2提供了复制文件描述符的功能。他们通常用于stdin,stdout或进程的stderr的重定向。一般来说,普通输出函数(如:printf),默认是将某信息写入到文件描述符为1的文件中,普通输入函数都默认从文件描述符为0的文件中读取数据。因此重定向操作实际上是关闭某个标准输入输出设备(文件描述符为0、1、2),而将另一个打开的普通文件的文件描述符设置为0、1、2.
   输入重定向:关闭标准输入设备,打开(或复制)某普通文件,使其文件描述符为0.
   输出重定向:关闭标准输出设备,打开(或复制)某普通文件,使其文件描述符为1.

 

第二组:标准io

1.打开函数 fopen

//头文件
#include <stdio.h>

//函数原型
FILE *fopen(const char *pathname, const char *mode);

//函数参数
const char *pathname;        //打开文件的路径
const char *mode;            //打开文件后文件以怎样的权限展示

附加:
    r	以只读的方式打开文件
	r+	以读写的方式打开文件
	w	以可写的方式打开文件,如果文件存在就清空,不存在就创建
	w+	以读写的方式打开文件,如果文件存在就清空,不存在就创建
	a	以可写的方式打开文件,如果存在就追加,不存在就创建,EOF符保留
	a+	以读写的方式打开文件,如果存在就追加,不存在就创建,EOF符不保留

返回值:
    成功:返回一个文件流指针
    失败:返回NULL

具体可以参考大佬的fopen函数及读写权限;

和另一位大佬的 文件描述符与文件流指针以及重定向;

 2.关闭函数 fclose

//头文件
#include <stdio.h>

//函数原型
int fclose(FILE *stream);

//函数参数
FILE *stream        //文件流指针

返回值:
    成功:返回0
    失败:返回EOF(头文件中EOF被定义为-1)

3.读写函数 fread fwrite

//头文件
#include <stdio.h>

//函数原型
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

//函数参数
void *ptr 	    //读写数据存储的缓冲区位置
size_t size, 	//每一块存储区的大小(字节)
size_t nmemb    //打算使用多少块操作数据(和calloc类似)
FILE *stream    //操作对象的文件流指针

返回值:
	成功:返回读取或者写入的完整的数据块的个数
	失败:返回0或者其他小于0的数据

注意:返回值是读取的完整的数据块的个数,就算最后一次读取的数据没有达到一个数据块的长度,数据还是会被读取

4.标准io文件属性 feof

//头文件
#include <stdio.h>

//函数原型1
void clearerr(FILE *stream); // 清除文件的错误码
int feof(FILE *stream); // 检查光标是否到了文件的末尾

返回值:
	成功:非零的时候就表示到达了文件的末尾
	失败:为零的时候就是没有找到文件末尾位置
       int ferror(FILE *stream); // 检查文件操作过程中的出错编码

返回值:
	成功:为零的时候说明没有错误
	失败:非零的时候,表示遇到错误
       int fileno(FILE *stream);	// 检查文件描述符是多少

=================================================================
//函数参数
FILE *stream    //文件流指针

feof的缺陷:就算文件光标移动到了文件末尾,那也需要再读一次,才能获得非零值

在C里,只有当文件位置指针到了文件末尾,然后再发生读/写操作时,标志位才会被置为含有_IOEOF。

5.标准io中文件偏移 fseek

//头文件
#include <stdio.h>

//函数原型
int fseek(FILE *stream, long offset, int whence);

//函数参数
FILE *stream 	//偏移对象,文件流指针
long offset 	//偏移量 字节
int whence		//基准点
    {
		SEEK_SET	文件的起始位置
		SEEK_CUR	文件的当前位置
		SEEK_END	文件的末尾位置
    }

返回值:
	成功:0
    失败:-1

注意:fseek与lseek返回值不相同

       long ftell(FILE *stream); // 返回当前文件位置,距离文件开头处的长度

注意:ftell只做计算,不做偏移

       void rewind(FILE *stream); 等价于(void) fseek(stream, 0L, SEEK_SET),将偏移量偏移到文件开头处

6.标准化的输入函数----字符和字符串

//头文件
#include <stdio.h>

//从文件里面获取一个字符
int fgetc(FILE *stream);

//从文件中读取size-1长度的字符串,存放到s为首地址的内存中,或者读到换行符时结束,
char *fgets(char *s, int size, FILE *stream); //返回值与s相同,都指向存储字符串的缓冲区,如果失败,返回NULL

//从文件中获取一个字节 (fgetc和getc的区别:fgetc是函数,getc是带参宏)
int getc(FILE *stream);

//获取缓冲区的一个字符
int getchar(void);

//获取缓冲区中的一个字符串
char *gets(char *s); // 因为经常会导致内存溢出,所以已经停用

==============================================================

函数参数:
	FILE *stream 文件流指针
	int size 	大小(字节)
	char *s	char *类型的指针,指向存储字符串的空间

7.标准化输出函数----字符和字符串

//头文件
#include <stdio.h>

//输出一个字符到文件中
int fputc(int c, FILE *stream);

//输出一个字符串到文件中
int fputs(const char *s, FILE *stream);

//输出一个字符到文件中,fputc是函数,putc是宏定义
int putc(int c, FILE *stream);

//输出一个字符
int putchar(int c);

// 输出一个字符串
int puts(const char *s);

函数参数:
	int c		    //字符或者ASCII码值
	const char *s   //字符串数据
	FILE *stream    //文件流指针

8.格式化输出----可变参函数

//头文件
#include <stdio.h>

//格式化输出到屏幕(stdout)上
int printf(const char *format, ...);

//格式化输出到文件中(标准IO)
int fprintf(FILE *stream, const char *format, ...);

//格式化输出到文件中(系统IO)
int dprintf(int fd, const char *format, ...);

//组合字符串,将格式化的组合之后的字符串输出到str指向的内存中
int sprintf(char *str, const char *format, ...);

//组合字符串,将格式化的组合之后的size-1个字符串输出到str指向的内存中
int snprintf(char *str, size_t size, const char *format, ...);

//函数参数
const char *format      //格式化符号 %d %s %c
FILE *stream	        //文件流指针
int fd		            //文件描述符
char *str		        //str存储字符串的位置
size_t size	            //输出大小

Hello...wait
关注 关注
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
文件IOIO编程)
weixin_48102054的博客
09-21 761
文件IO(IO编程)
文件IO
境界の彼方
08-09 3913
Linux文件 IO笔记整理
IO--文件IO
最新发布
2301_78622258的博客
08-29 565
主要简述文件IO实现的函数功能和实现过程
文件 IO
l22221的博客
02-19 964
1.标准IO是库函数,是对系统调用的封装2.文件IO是系统调用,是Linux内核中的函数接口3.标准IO是有缓存的4.文件IO是没有缓存的文件IO:1.操作步骤:2.打开文件:open 接口有两种形式功能:打开文件并且获得文件描述符参数:pathname:要打开的文件名flags:标志位O_RDONLY 只读O_WRONLY 只写O_RDWR 读写O_APPEND 追加。
IO文件IO
qq_57018268的博客
08-05 294
IO文件IO
Linux文件IO跟标准IO总结
01-24
4. **适用场景**:标准IO适合文本处理和简单文件操作,而文件IO更适合底层系统编程或高效IO操作。 为了更好地理解和对比这两种IO方式,可以参考以下资源: - **标准IO文件IO区别.pdf**:这个文档可能详细分析了...
Python文件IO .pdf
07-15
了解和掌握这些基本的Python文件IO操作是成为一名合格的Python开发者的基础,也是处理日常数据任务不可或缺的技能。在面试中,除了理论知识,还可能要求考生用Python解决实际问题,例如编写一个函数来统计一个文件中...
用C++实现简单文件IO操作
09-15
### C++中的简单文件IO操作详解 #### 一、ASCII 输出 在C++中处理文件输入输出(简称IO)操作时,通常会涉及到文件的读取与写入。本篇文章将详细介绍如何使用C++来进行基本的ASCII文件IO操作。为了进行这些操作,...
Multisim_简单IO口扩展实验_
10-02
"Multisim_简单IO口扩展实验_"这个主题旨在帮助学习者掌握如何在单片机系统中扩展I/O口,并编写数据输入输出程序。在实际应用中,单片机的I/O口数量往往无法满足所有需求,因此需要通过扩展来增加接口,以实现更多...
Linux文件IO详解
godfatherlzq的博客
05-24 1585
学习Linux的同学都知道一句话:Linux下一切皆文件。学会文件基础和文件IO就是步入Linux殿堂重要的几步之一。在学习文件IO之前,我们先要了解一下文件基础和文件IO的定义。 一、文件基础 文件的概念就是:一组相关数据的有序集合。 他一共有几种类型:r -- 常规文件 d -- 目录文件 c -- 设备文件 b -- 块设备文件 p -- 管道文件 s -- 套接字文件 l -- 符号链接文件。这里面要特别注意的是管道文件和套接字文件是进程间通讯使用的,可...
IO-文件
a531525064的博客
03-26 223
文件读写 读文件,使用python内置的open()函数,传入文件名合标示符 f = open(’/Users/michael/test.txt’, ‘r’) read()方法可以一次读取文件的全部内容,python把内容读到内存,用一个str表示 最后调用close()方法关闭文件文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。 由...
详解文件IO
weixin_51153209的博客
10-27 1811
什么是文件I/O?posix(可移植操作系统接口)定义的一组函数,每次读写操作都引起系统调用没有流指针不能用刷新流和定位流的函数核心概念是访问各种类型文件Linux下, 标准IO基于文件IO实现​ 文件I/O是操作系统封装了一系列open、close、write、read等API函数构成的一套用来读、写文件的接口供应用程序使用,通过这些接口可以实现对文件的读写操作,但是效率并不是最高的。
文件---IO
daima2的博客
08-23 1041
文件IO实际就是针对文件内容进行操作,包括打开,读取/写入,关闭文件;I就是Input,O就是Output;针对文件IO,就要说要“流”(stream)这个概念了;说要流,我们就会想到水流,源源不断的水流,我们要接100ml的水,可以一次性接完,也可以两次接完,一次接50ml,还有很多种接法;对于要读取100字节的数据,你可以选择一次性接100字节,也可以分两次,一次接50字节;这与接水非常相似,也可以叫文件流;和;
文件IO(系统IO
等闲的博客
06-17 474
文件IO(系统IO文件描述符(fd)是在文件IO中贯彻适中的类型。 文件描述符的概念: 实质是一个整形数,文件描述符优先使用当前可用范围内最小的一个。 说到stream首先想到的是stdio、stdout、stderr、 说到fd首先想到的是0、1、2 文件描述符的操作:open、close、read、write、lseek 标准IO基于系统IO文件IO与系统IO区别: IO的效率问题: 文件共享: 原子操作: 程序中的重定向:d...
文件I/O(标准,文件、静态库和动态库)
qq_36091214的博客
04-21 2437
概念:一组相关数据的有序集合常规文件 r目录文件 d字符设备文件 c块设备文件 b管道文件 p套接字文件 s符号链接文件 l。
写文章

热门文章

  • 文件io简单了解 846
  • 文件流指针和文件标识符 230
  • 判断链表中是否有环链 183
  • 高效率输出一个字节中置1的位数 136

最新评论

  • 判断链表中是否有环链

    CSDN-Ada助手: 非常感谢您分享这篇有关链表环的判断的博客。您的思路非常清晰,让我对链表环的判断有了更深入的了解。除了快慢指针之外,我发现还有一种叫做“哈希表”的方法可以判断链表中是否有环。同时,我们在实际应用中也需要考虑链表的各种操作,例如链表的插入、删除、反转等。希望您可以继续分享更多实用的知识和技能,让我们一起成长进步。 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2 如果您持续创作,完成第三篇博客,并且质量分达到 80 分以上,在评论区就有机会获得红包奖励哦!

  • 文件io简单了解

    CSDN-Ada助手: 恭喜你写了第三篇博客,主题也很不错。对于文件io的简单了解,我也从中受益匪浅。希望你能继续坚持创作,分享更多有价值的内容给大家。下一步的创作建议,可以考虑深入探讨某个文件io相关的主题,或者结合实际案例进行分析,让读者更好地理解和应用。期待你的下一篇文章! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3,我们会奖励持续创作和学习的博主,请看:https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply3

  • 文件流指针和文件标识符

    CSDN-Ada助手: 非常感谢用户分享了这篇关于文件流指针和文件标识符的博客!这篇博客讲解得非常清晰,让读者能够更好地理解和应用这些概念。同时,也非常欣赏用户持续创作的精神,相信这样的坚持一定会收获更多的成果。 建议下一步可以探讨一些具体的实际应用场景,如何利用文件流指针和文件标识符来实现一些功能。希望用户能够继续保持创作的热情,为大家带来更多优质的内容! CSDN 会根据你创作的前四篇博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply4 看奖励名单。

  • 高效率输出一个字节中置1的位数

    CSDN-Ada助手: 算法 技能树或许可以帮到你:https://edu.csdn.net/skill/algorithm?utm_source=AI_act_algorithm

大家在看

  • IEC104规约的秘密之十五----冻结数据
  • 班迪录屏 Bandicam v7.0.1.2132 中文激活版 1
  • 信号处理入门与实战指南 730
  • 整流电源侧线电压U1的估算 562
  • zlibrary镜像网站入口,国内最新可访问地址官网

最新文章

  • 文件流指针和文件标识符
  • 判断链表中是否有环链
  • 高效率输出一个字节中置1的位数
2023年4篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家上海卡通人玻璃钢雕塑摆件宝鸡镜面不锈钢玻璃钢雕塑盘龙区玻璃钢雕塑如何玻璃钢仿铜雕塑批发价格吴川玻璃钢气球雕塑云浮玻璃钢雕塑定制厂家苏州玻璃钢商场美陈格尔木玻璃钢大型雕塑江门玻璃钢熊猫雕塑益阳玻璃钢人物雕塑成都玻璃钢雕塑定做厂玻璃钢景观雕塑小品灯西安步行街玻璃钢雕塑市场户外玻璃钢人物雕塑服务电话吕梁玻璃钢园林雕塑公司玻璃钢雕塑出售仿真人物玻璃钢雕塑哪家好玻璃钢雕塑怕不怕雨商场店庆创意美陈河南季节性商场美陈报价水果玻璃钢雕塑制作临汾玻璃钢卡通雕塑厂家商场异形门头美陈广西南宁玻璃钢雕塑制作厂家徐州商场美陈布展高架玻璃钢花盆槽托3月份商场适合的美陈许昌玻璃钢雕塑制作流程景观玻璃钢彩绘雕塑定制青岛玻璃钢雕塑多少钱香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化