基础IO(std_io、sys_io、缓冲区、文件描述符、文件流指针、重定向、文件系统、硬软链接、动态库与静态库)

本文详细介绍了C语言的基础IO操作,包括标准库的fopen、fclose、fwrite、fread、fseek等接口以及系统调用的open、close、write、read、lseek。讲解了缓冲区的概念、文件描述符的含义和分配规则,还探讨了重定向、文件系统、硬链接、软链接、静态库与动态库的使用。

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

基础 IO

标准库 io 接口(fopen、fclose、fwrite、fread、fseek)

PS:标准库IO接口的操作句柄是:FILE*(文件流指针)

  • fopen : FILE *fopen(const char *path, const char *mode);

filename - - - 这是 C 字符串,包含了要打开的文件名称。
mode- - - 这是 C 字符串,包含了文件访问模式。
在这里插入图片描述
1、访问模式是 a 系列时,写入的时候总是写到文件末尾,写入时不受 fseek 的影响,但fseek 可以影响 a+ 读的位置。
2、访问模式是 w 系列时,会清空原有内容,读写文件时默认在文件起始位置。读写位置都受 fseek 的影响。
3、访问模式是 r 系列时,读写文件时默认在文件起始位置,会覆盖写入数据。读写位置都受 fseek 的影响。

  • fclose : int fclose(FILE *fp);

fp- - - 文件流指针

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

ptr - - - 这是指向要被写入的元素数组的指针。
size - - - 这是要被写入的每个元素的大小,以字节为单位。
nmemb - - 这是元素的个数,每个元素的大小为 size 字节。
stream - - 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。
返回值:成功,返回写入的块个数而不是数据长度,也就是返回 nmemb的值。失败,返回 0.
在这里插入图片描述

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

ptr - - - 接收数据的地址,即数据保存的地址
size - - - 这是要被读出的每个元素的大小,以字节为单位。
nmemb - - 这是要被读出元素的个数,每个元素的大小为 size 字节。
stream - - 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。
返回值:成功,返回读出的块个数而不是数据长度,也就是返回 nmemb的值。失败,返回 0.

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

stream - - - 指向FILE 对象的指针。
offset - - - 偏移量。
whence - - - 偏移起始位置,可能取值为:SEEK_SET(起始位置)、SEEK_CUR(当前位置)、 SEEK_END(文件末尾)
返回值:成功返回 0

  • 举例实现标准库IO写读文件
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>

int main()
{
   
  FILE* fp = fopen("./tmp.txt","w+");
  if(fp == NULL)
  {
   
    perror("fopen error");
    return -1;
  }

  int ret;
  char* ptr = "wzf\n"; 
  ret = fwrite(ptr,strlen(ptr),1,fp);
  printf("fwrite return value:%d\n",ret);

  fseek(fp,0,SEEK_SET); 
  char buf[1024]={
   0};
  ret = fread(buf,strlen(ptr),1,fp);
  printf("read buf:[%s]-fread return value:[%d]\n",buf,ret);
  fclose(fp)</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值