【回眸】Linux内核(二)对文件的操作

Linux内核(二)对文件的操作(创建、写入、关闭)

写入文件 关闭文件

查找 close()、write()的头文件

首先找头文件,在原来的几个头文件下添加close()、write()函数需要的头文件和该函数的用法

在终端中分别输入

man 2 close
man 2 write

查清用法之后可以照着写,但是会发现几个问题

(1)两个函数需要加的头文件是一样的

(2)write()函数更复杂一些,close()只需要传入fd即可

(3)仿写开始,首先要初始化一个 const void *buf 无类型指针,我们要写入的是字符串,所以这里用char *buf

(4)write()传入的第三个参数是size_t count,这时候我们不能用sizeof(buf),因为 sizeof(buf)空间有限,所以我们回归本源,使用计算char长度的 strlen()

(5)使用strlen()需要注意这里也要头文件

查找strlen()的头文件

man strlen

找到需要应用的头文件,复制到原来的头文件下面

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

思路

//1.打开(什么方式)

//2.打印文件描述符

//3.如果打开失败(fd=-1)以可读写的方式再来一次

//4.记得加上或操作方便创建新文件,新文件的权限可以写0600

//5.内循环判断文件描述符大于0,打印创建成功

//6.写入(文件描述符,buf,buf长度)

//7.关闭(文件描述符)

实例1:

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

int main(){
    //定义要写入的内容
    char *buf = "pjy!yyds!by鸭鸭";
    int fd;
        fd = open("./file1",O_RDWR);
            if(fd == -1){
                printf("file open error!\n");
                //如果file1不存在,创建一个file1
                fd = open("./file1",O_RDWR|O_CREAT,0600);
                    if(fd > 0)
                    {
                        printf("create file1 sucessfully!\n");
                    }
            }
        //如果已经存在file1,打印一句话并写入*buf的内容
        printf ("open file1 successfully!&fd = %d\n",fd);
        write(fd,buf,strlen(buf));
        //关闭上述文件
        close(fd);
        return 0;
}

结果1:

打开file1文件,会发现*buf的内容全部写入成功

总结易错点:

1、选择用sizeof()来计算buf的大小,这样得出来的结论是4 或者8,这是一个很常见的面试题,32位机的指针大小就是4字节,64位机的指针大小就是8字节

2、所以需要选用strlen()才更合适,但是使用strlen()需要添加头文件string.h我有一次没加这个头文件

3、使用write()函数时,传入的第二个参数应该为buf ,而非*buf

#实习必须要去大厂吗?##我的秋招日记##秋招有哪些公司要求提前实习#
应届生必学实用物联网技术 文章被收录于专栏

本专栏助应届生从物联网小白成长为企业争抢的技术人才,聚焦三大核心技术:传感器应用(环境监测)、嵌入式开发(STM32/Arduino)、通信协议(LoRa/NB-IoT/MQTT),配合10+实战项目(如智能温湿度监控系统)积累项目经验。覆盖智能硬件、工业物联网、智能家居领域岗位需求,解析企业招聘技术重点与面试题,帮电子、计算机、自动化等专业学生构建知识体系,提前锁定名企Offer!

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务