Linux文件操作的C库函数(read,write,lseek)

本文详细介绍了Linux系统中用于文件操作的C库函数,包括read函数用于从文件读取数据,write函数用于写入数据,以及lseek函数用于改变文件指针位置。read函数返回读取的字节数,write函数返回写入的字节数,lseek函数则提供了文件指针的灵活管理,支持文件长度的拓展。

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

read_write函数

1. read函数

  • 函数原型: ssize_t read(int fd, void *buf, size_t count); 
  • 参数:
    • fd:文件描述符,open函数的返回值
    • buf:缓冲区,存储要读取的数据
    • count:缓冲区能存取的最大字节数  sizeof(buf)
  • 返回值:
    • -1 :失败
    • >0:读取的字节数
    • =0:文件读完了

2. write函数

  • 函数原型:ssize_t write(int fd, void *buf, size_t count);
  • 参数:
    • fd:文件描述符,open函数的返回值
    • buf:缓冲区,要写到文件的数据
    • count:能存取的有效字节数 
  • 返回值:
    • -1:失败
    • >0:写入到文件的字节数
    • =0:读取结束
%%拷贝english.txt到一个新文件中

#include <stdio.h>
#include <unist.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string>
#include <fcntl.h>

int main(int argc, const char* argv[])
{
    //打开一个文件
    int fd=open("english.txt",O_RDWR);//english.txt保存在main.c同一个文件夹
    printf("fd = %d\n", fd);

    //打开另一个文件,写操作
    int fd1 =open("temp.txt",O_WRONLY | O_CREAT, 0664);//若没有temp.txt文件,会new一个,权限为0664;
    printf("fd1 = %d\n", fd1);

    //从fd读取数据
    char* buf[4096];//设置4K个字节的缓冲区
    int len = read(fd,buf,sizeof(buf));
    
    while(len>0){
        //写入数据
        int ret = write(fd2,buf, len);
        printf("ret = %d\n",ret);
        //继续读取下一块的数据
        len = read(fd,buf,sizeof(buf));
    }

    close(fd);
    close(fd1);
    return 0;

}

lseek函数

  • 函数原型: off_t lseek(int fd, off_t offset, int whence)
  • 功能:
    • 文件指针移动到头部:
      lseek(fd,0,SEEK_SET);
    • 获取文件指针当前的位置:
      int len = lseek(fd,0,SEEK_CUR);
    • 获取文件长度:
      int len = lseek(fd,0,SEEK_END);
    • 文件拓展:
      1. 文件原大小100k,拓展到1100k:lseek(fd,1000,SEEK_END);
      2. 需要做一个写操作:write(fd,"a",1);

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值