【回眸】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!