嵌入式操作系统网络编程(3)

这篇博客详细介绍了嵌入式操作系统中的文件I/O系统调用,包括create、open、close、read、write、lseek等API的使用方法和注意事项。还深入探讨了fcntl函数在文件描述符操作、文件状态标志设置、异步I/O信号管理和文件锁等方面的应用。同时,讨论了文件描述符的阻塞与非阻塞状态,并提供了设置文件为非阻塞模式的示例。文章最后提到了mmap和munmap函数在内存映射方面的功能和优缺点。
摘要由CSDN通过智能技术生成

D3.10

文件I/O的系统调用接口(API)(create、open、close、read、write、lseek)

学习API的方法:(系统调用、文件描述符)

1、
接口定义(函数名、函数形参、函数的返回值、头文件)

2、
测试demo、测试形参和返回值作用;

3、
应用案例;

文件描述符:

特殊的文件描述符:一个程序(进程)会打开3个文件:标准输入0,标准输入1,标准出错2

文件的读写会发生阻塞?(普通文件、目录文件不会发生阻塞,设备文件读写时会阻塞)

当你读取空文件时,会发生阻塞,当你向满文件写数据时,会发生阻塞;

如何将文件设置为非阻塞?(设备文件)

1、
open打开设备文件时(在linux终端输入man 2 open),选择一个选项:O_NONBLOCK

2、
如果文件已打开,可选择fcntl为非阻塞

mmap优缺点:https://blog.csdn.net/Holy_666/article/details/86532671

https://www.cnblogs.com/java-koma/archive/2012/12/01/2797226.html

系统调用:保护内核

缺点:开销比较大;

补充:

ftruncate(fd,10); // ó lseek(fd,10,SEEK_END); write(fd,”\0”,1);拓展文件大小为11

//需要写权限才能拓展文件大小,头文件#include
<unistd.h>#include <sys/types.h>

printf为读操作 scanf也是读操作

od
–tcx 文件名(终端命令)

【fcntl系统调用】

功能描述:根据文件描述词来操作文件的特性。

用法:

int
fcntl(int fd, int cmd);

int
fcntl(int fd, int cmd, long arg);

int
fcntl(int fd, int cmd, struct flock *lock);

参数:

fd:文件描述词。

cmd:操作命令。

arg:供命令使用的参数。

lock:同上。

有以下操作命令可供使用

一. F_DUPFD :复制文件描述词 。

二. FD_CLOEXEC :设置close-on-exec标志。如果FD_CLOEXEC位是0,执行execve的过程中,文件保持打开。反之则关闭。

三. F_GETFD :读取文件描述词标志。

四. F_SETFD :设置文件描述词标志。

五. F_GETFL :读取文件状态标志。

六. F_SETFL :设置文件状态标志。

其中O_RDONLY,
O_WRONLY,
O_RDWR, O_CREAT, O_EXCL, O_NOCTTY 和
O_TRUNC不受影响,

可以更改的标志有 O_APPEND,O_ASYNC, O_DIRECT,
O_NOATIME 和
O_NONBLOCK。

七. F_GETLK, F_SETLK
和 F_SETLKW :获取,释放或测试记录锁,使用到的参数是以下结构体指针:

F_SETLK:在指定的字节范围获取锁(F_RDLCK, F_WRLCK)或者释放锁(F_UNLCK)。如果与另一个进程的锁操作发生冲突,返回 -1并将errno设置为EACCES或EAGAIN。

F_SETLKW:行为如同F_SETLK,除了不能获取锁时会睡眠等待外。如果在等待的过程中接收到信号,会立即返回并将errno置为EINTR。

F_GETLK:获取文件锁信息。

F_UNLCK:释放文件锁。

为了设置读锁,文件必须以读的方式打开。为了设置写锁,文件必须以写的方式打开。为了设置读写锁,文件必须以读写的方式打开。

八. 信号管理

F_GETOWN,
F_SETOWN, F_GETSIG 和
F_SETSIG 被用于IO可获取的信号。

F_GETOWN:获取当前在文件描述词 fd上接收到SIGIO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值