正点原子《嵌入式linux c应用编程》视频教程学习笔记,持续更新中

第一章太简单,没东西可记。

2.3 IO基础

(1)基本函数原型

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);当flags中带O_CREAT或者O_TMPFILE(创建的临时文件)时,才需要指定mode,mode指新建文件的访问权限。

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

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

(2)lseek函数:修改文件读写指针的位置

off_t lseek(int fd, off_t offset, int whence);

whence:偏移量的参考值,取值SEEK_SET(文件头部) SEEK_END(文件尾部) SEEK_CUR(当前位置);off_t:指偏移后读写指针所在的位置

两个使用场景:

一是计算文件的大小:

int size = lseek(fd,0, SEEK_END);

二是计算当前读写指针的位置:

int off = lseek(fd, 0,SEEK_CUR);

3.1 文件管理

(1)block(块)包含多个sector(扇区)。磁盘分区以块为单位。

(2)磁盘分区或者格式化时,系统把磁盘空间分为管理表项区域和数据区。前者又称iNode。

(3)PCB全名process control block,即进程控制块,用来管理进程。内核为每个进程创建PCB数据块。

PCB数据块维护文件描述符表,该表管理当前进程所用的所有文件fd。文件描述符表中的每个节点又关联磁盘中具体的iNode。

3.2 errno和空洞文件

(1)errno是系统全局变量,表示系统调用某个函数(限指系统函数和库函数)失败后具体的错误编号,编号是大于0的int类型值。

注意:不是所有系统函数和库函数都使用errno的。是否支持可以看man手册。

(2)strerror()函数:打印错误编号errno对应的具体错误原因。

char *strerror(int errnum)

(3)perror()函数:不用传入错误编号,直接打印错误原因

void perror(const char *s)   入参可以为空字符串,也可以用户自定义。自定义时,打印内容是:”自定义” + ”: “ + ”系统错误”

(4)空洞文件的作用:

方便多线程写同一个文件。

两个应用场景:

一是迅雷下载文件

二是Vmware给虚拟机分配磁盘空间

(5)du命令(disk usage):用来显示文件的实际大小,如du -h test.txt:按K、M、G的单位方式显示文件test.txt的大小

ls命令:显示文件的逻辑大小。

3.3 open的O_TRUNC和O_APPEND标志

  1. O_TRUNC:把文件清空,大小置0
  2. O_APPEND:以追加的方式打开文件。

注意两点:

  1. O_APPEND和write操作是原子操作,即用了该标志打开了问题,代码后面一定要有write操作,在open和write之间如果调用了lseek去修改读写指针的位置,则对write的写位置不生效,write一定在文件尾部开始操作。
  2. O_APPEND标志对read操作的位置没有影响

3.4 O_APPEND在同一文件被多次打开中的使用。其作用是防止文件内容被覆盖,每个fd的write都发生在文件末尾。

同一个文件可以被多次打开!

3.5 文件描述符的复制

int dup(int oldfd)  返回值是自动生成的新的fd

int dup2(int oldfd, int newfd);   newfd是用户指定的fd,如果这个已经存在了,则函数返回-1

3.6 文件共享

多个进程或者同一个进程内的多个线程同时对同一个文件做操作。

3.7

(1)竞争冒险:

多个进程(或者线程)对同一个文件做写操作时,可能文件内容被覆盖,结果可能和预期不一致。

(2)pread和pwrite函数:

ssize_t pread(int fd, void *buf, size_t count, off_t offset);

ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);

和read、write函数相比,多了第三个入参-读写指针偏移量。即pread、pwrite在指定的偏移位置读写数据,读写之后,读写指针位置保持不变,不会向后偏移。

(3)O_EXCL标志

Open文件时,把判断文件是否存在和创建文件两个动作当做原子操作,即这两个动作不可被分割,无法拆开。

它类似于升级版的O_CREAT标志。用于文件共享的场景中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 正点原子 Linux C 应用编程是一门面向 Linux 系统的 C 语言编程课程,课程内容涵盖 Linux 系统编程、TCP/IP 网络编程、多线程编程、音视频编解码、QT 编程等多个方面,旨在培养学员在 Linux 环境下进行应用开发的能力。 该课程由正点原子教育推出,以实践为主,理论与实践相结合的方式来进行教学。学员们将通过丰富的示例编程、实验和课堂讲解等来深入了解和掌握 Linux C 应用编程。 在 Linux C 应用编程课程,学员将学习 Linux 系统编程的基础知识和主要的系统调用,使其熟悉 Linux 系统下的文件操作、进程管理、内存映射、信号处理等编程任务。学员还将学习 TCP/IP 网络编程,包括套接字编程、Socket 编程、网络通信等内容。此外,学员还将深入学习多线程编程、音视频编解码和 QT 编程等方面,以便快速实现各种应用程序的开发。 总之,正点原子 Linux C 应用编程课程是一门全方位、全面深入的 Linux 系统下 C 语言编程课程,为学员提供了开展 Linux 应用开发的必备技能和丰富经验。无论是在 Linux 服务器端还是在嵌入式 Linux 系统,学员都能够通过该课程的学习获得更多的应用编程知识和实战经验。 ### 回答2: 正点原子 Linux C应用编程是一个涉及到嵌入式操作系统和C语言学习课程。通过本课程的学习,可以掌握如何在Linux操作系统下进行C语言应用程序开发,并具备在嵌入式系统上操作 Linux 的能力。Linux是一种广泛应用于服务器和嵌入式系统的操作系统。具有自由、开放源代码、稳定、安全等特点,Linux越来越受到人们的关注。 本课程的内容分为基础篇和高级篇两部分。基础篇主要讲解Linux系统相关概念,如文件系统、进程、终端等,以及基本的C语言语法和编程技巧,例如变量、运算符、循环、条件语句、函数等。高级篇则介绍Linux下的网络编程、进程间通信、多线程编程、设备驱动程序等内容,更加深入Linux C应用程序开发的技术细节。 本课程不仅提供了理论知识的讲解,还包括实际应用案例和编程练习,学员可以通过实践,不断提高自己在嵌入式 Linux C应用编程方面的能力。通过学习本课程,可以为嵌入式系统开发和实际项目应用打下坚实的基础。 总之,正点原子 Linux C应用编程是一门非常实用的课程,对于想要深入了解嵌入式Linux系统和C语言应用开发的人来说是必修的课程,能够提升自己在嵌入式领域的技能和竞争力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汉尼拔勇闯天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值