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

2024-02-17 17:18

本文主要是介绍嵌入式操作系统网络编程(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这篇关于嵌入式操作系统网络编程(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/718468

相关文章

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同