C语言高级操作——文件IO与目录IO
创始人
2025-05-31 07:08:03

文件IO与标准IO的区别:

1.标准IO是库函数是对系统调用的封装
2.标准IO有缓存		
3.文件IO是系统调用Linux内核函数接口
4.文件IO没有缓存

文章目录

  • 一、文件IO
    • 1、open
    • 2、close
    • 3、read
    • 4、write
    • 5、lseek
    • 6、文件IO扩展
  • 二、目录IO
    • 1、opendir
    • 2、closedir
    • 3、readdir
    • 4、getcwd
    • 5、chdir
    • 6、mkdir
    • 7、rmdir

一、文件IO

1、open

int open(const char *pathname, int flags);
  功能:打开文件并获得文件描述符参数:pathname:打开文件路径首地址flags:打开标识O_RDONLY	只读O_WRONLY	只写O_RDWR		读写O_APPEND	追加O_CREAT		创建O_TRUNC		清0O_ASYNC		异步IOO_NONBLOCK	非阻塞IO返回值:成功返回新文件描述符失败返回-1 文件描述符:很小的非负整数 0 1 2 3 ..   0-1023新生成的文件描述符永远为最小的非负整数rwx421练习:使用文件IO模拟标准IO的所有打开方式"r"			O_RDONLY "r+"		O_RDWR "w"			O_WRONLY | O_CREAT | O_TRUNC, 0664"w+"		O_RDWR | O_CREAT | O_TRUNC, 0664"a"			O_WRONLY | O_CREAT | O_APPEND, 0664"a+"		O_RDWR | O_CREAT | O_APPEND, 0664 0:	标准输入 
1:	标准输出
2:	标准出错

2、close

close

int close(int fd);

功能:
 关闭文件描述符

3、read

ssize_t read(int fd, void *buf, size_t count);
  功能:从文件描述符fd中读count个字节存放到buf指向的空间中参数:fd:文件描述符 buf:存放数据空间首地址count:想要读取的字节数返回值:成功返回实际读取的字节数失败返回-1 读到文件末尾返回0 

4、write

ssize_t write(int fd, const void *buf, size_t count);
  功能:向文件描述符中写入buf指向的count个字节数据参数:fd:文件描述符buf:存放数据空间首地址count:写入数据的字节数返回值:成功返回实际写入字节数失败返回-1 没有写入任何东西返回0 

5、lseek

coff_t lseek(int fd, off_t offset, int whence);
  功能:重定位一个文件描述符的偏移量参数:fd:文件描述符offset:偏移量> 0		向后偏移 < 0		向前偏移whence:SEEK_SET	文件开头SEEK_CUR	文件当前位置SEEK_END	文件末尾返回值:成功返回当前偏移量的值失败返回-1 

6、文件IO扩展

可以这样看标准IO与文件IO的对应:

fopen -> open
fgetc fgets fscanf fread -> read
fputc fputs fprintf fwrite -> write
fseek ftell rewind -> lseek
fclose -> close

标准IO:文件流指针 FILE*
文件IO:文件描述符 int FILE*			int
1.fileno获得文件流指针对应的文件描述符
2.feof判断文件是否读到末尾
3.ferror判断文件是否读取出错
4.clearerror清除错误信息
5.fdopen 通过已经打开的一个文件描述符获得其文件流指针


练习:
利用文件IO read、write等函数完成图片的拷贝

二、目录IO

1、opendir

 DIR *opendir(const char *name);
  功能:打开一个目录并获得目录流指针参数:name:目录路径返回值:成功返回目录流指针失败返回NULL

2、closedir

int closedir(DIR *dirp);
  功能:关闭目录流指针参数:dirp:目录流指针返回值:成功返回0失败返回-1 

3、readdir

struct dirent *readdir(DIR *dirp);
  功能:读取目录流中下一个目录项的信息参数:dirp:目录流指针 返回值:成功返回存放目录项信息的结构体指针失败返回NULL读到目录项末尾返回NULLstruct dirent {ino_t          d_ino;       /* inode number */off_t          d_off;       /* offset to the next dirent */unsigned short d_reclen;    /* length of this record */unsigned char  d_type;      /* type of file; not supportedby all file system types */char           d_name[256]; /* filename */
};

4、getcwd

char *getcwd(char *buf, size_t size);
  功能:获得当前所在工作目录的绝对路径参数:buf:存放绝对路径字符串空间首地址size:最大允许读取的字节数返回值:成功返回存放绝对路径空间首地址失败返回NULL

5、chdir

int chdir(const char *path);
  功能:切换当前工作路径参数:path:新的工作路径返回值:成功返回0 失败返回-1 

6、mkdir

int mkdir(const char *pathname, mode_t mode);
  功能:创建目录文件参数:pathname:目录文件的路径mode:权限 0664 0777返回值:成功返回0 失败返回-1 rwxr:能否在目录中查看所有文件信息w:是否能够在目录文件中创建新文件x:能否进入目录文件

7、rmdir

int rmdir(const char *pathname);
  功能:删除一个空目录参数:pathname:目录路径 返回值:成功返回0 失败返回-1 

本章大作业:
(1)分别使用fgetc、fputc、fgets/fputs、fread/fwrite、read/write等函数实现文件拷贝
(2)从终端输入一个目录路径,找到该目录下所有的媒体文件并打印在终端
 /home/linux/Music
     “.mp3” “.mp4” “.avi” “.rm” “.rmvb” “.flv” “.wma”
(3)将一个指定ASCII码文件中所有的string1用string2替换
   file.txt
   hello
   hi




加油,希望能早日找到工作!
o(╥﹏╥)o

相关内容

热门资讯

广州“十五五”规划建议:构建赛... 转自:北京日报客户端中共广州市委关于制定广州市国民经济和社会发展第十五个五年规划的建议发布。其中提到...
新民艺评丨漪铜:紫色葡萄酒在月... (来源:上观新闻)近日,上海大学音乐学院长笛教师、苏州交响乐团客席首席、上海歌剧院交响乐团客席首席、...
大行评级丨麦格理:山东黄金将受... 格隆汇12月22日|麦格理发表研究报告指,对金价持正面看法,并认为山东黄金将受惠于金价上升及产能增长...
一次性信用修复政策来了!涉及信... 界面新闻记者 | 安震12月22日,中国人民银行发布通知,实施一次性信用修复政策,支持信用受损但积极...
中央安全生产考核巡查组在江苏明... 来源:中华人民共和国应急管理部11月份以来,2025年度安全生产考核巡查正式启动,由国务院安委会有关...