• Linux系统编程——文件的写入及读取


    写入(write)

    使用write函数需要包含以下头文件:

    #include 

    write的函数定义格式

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

    附加:一般将数据写入文件中后需关闭文件,这里需要调用关闭(close)函数,其包含的头文件与写入函数一样,函数定义格式也比较简洁,如下:

    int close(int fd);

    参数解读:调用该函数时,只需将需要关闭文件的文件描述符fd传进来即可实现关闭

    函数定义的参数解读

    int fd:fd为创建文件的文件描述符
    const void *buf:这里为无类型的指针,通常对他进行强转成字符串:buf为要写入的字节
    size_f count:写入字节的长度

    整体流程:从定义的buf中写入count个字节并传到文件描述符fd对应的文件

    函数返回值

    写入成功后会返回写入字节的个数(整型数);写入失败会返回-1

    代码示例

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. int main()
    7. {
    8. int fd;
    9. char *buf = "Hello Word";//将无类型指针强制转换并输入字节
    10. fd = open("./file1",O_RDWR);
    11. if(fd == -1)
    12. {
    13. printf("open file1 failed\n");
    14. fd = open("./file1",O_RDWR|O_CREAT,0600);
    15. if(fd > 0)
    16. {
    17. printf("creat file1 success\n");
    18. }
    19. }
    20. printf("open success:fd = %d\n",fd);
    21. write(fd,buf,strlen(buf));
    22. close(fd);
    23. return 0;
    24. }

    注意:这里计算字符串长度最好用strlen,它能计算出字符串的有效长度,而这里的buf是char型指针,如果用sizeof只能计算出char型在系统中的长度(8个字节),若输入的字符串超过8位,那么使用sizeof只能输入前8位。

    读取(read)

    使用读取函数时需包含以下头文件

    #include 

    read的函数定义格式

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

    函数定义的参数解读

    int fd:fd为创建文件的文件描述符
    const void *buf:这里为无类型的指针,通常对他进行强转成字符串:buf为要读取的字节
    size_f count:读取字节的长度

    整体流程:从文件描述符fd读取count个字节的数据传到buf的缓冲区中

    函数返回值

    读取成功后会返回读取字节的个数(整型数);读取失败会返回-1

    代码示例

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. int main()
    8. {
    9. int fd;
    10. char *buf = "Hello Word";
    11. fd = open("./file1",O_RDWR);//文件删除,文件描述符返回值为-1
    12. if(fd == -1)
    13. {
    14. printf("open file1 failed\n");
    15. fd = open("./file1",O_RDWR|O_CREAT,0600);//重新建立一个file1,此时文件描述符返回值大于0
    16. if(fd > 0)
    17. {
    18. printf("creat file1 success\n");
    19. }
    20. }
    21. printf("open success:fd = %d\n",fd);
    22. int n_write = write(fd,buf,strlen(buf));//定义一个整型变量存放write返回的文件描述符的值(写入字节个数)
    23. if(n_write != -1)
    24. {
    25. printf("write %d byte to file1\n",n_write);
    26. }
    27. close(fd);//由于光标问题,写完之后光标在最后面 此时read从光标位置开始读取,并不会读取写入文件中的字符串,需关闭文件并重新打开
    28. fd = open("./file1",O_RDWR);
    29. char *readBuf;
    30. readBuf = (char *)malloc(sizeof(char)*n_write+1);//对指针进行开辟内存空间,其读取的字节数为写入的字节数,其大小为char型,可用写入字节个数乘以char的值即为读取个数,此时存放的是字符串
    31. int n_read = read(fd,readBuf,n_write);//定义一个整型变量存放read返回的文件描述符的值(读取字节个数)
    32. printf("read byte is %d,context is %s\n",n_read,readBuf);
    33. close(fd);
    34. return 0;
    35. }

  • 相关阅读:
    Coeus: A System for Oblivious Document Ranking and Retrieval
    java计算机毕业设计高校科研信息管理系统MyBatis+系统+LW文档+源码+调试部署
    python知识点总结(1)
    搭建一个干净整洁的vue前端开发环境
    如何安装GCC?
    2023年辽宁省数学建模竞赛A题铁路车站的安全标线
    Mysql -常见函数
    【RHCE】作业:配置NFS开发目录&配置DNS正向解析域名
    功利点没啥!
    JavaScipt设计模式初探-代理模式(三) 虚拟代理
  • 原文地址:https://blog.csdn.net/2301_78772787/article/details/134327536