首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux编程(阻塞和非阻塞IO)

Linux设备驱动中的阻塞和非阻塞I/0,简单来说就是对I/O操作的两种不同的方式,驱动程序可以灵活的支持用户空间对设备的这两种访问方式。...非阻塞应用程序通常使用select系统调用查询是否可以对设备进行无阻塞的访问最终会引发设备驱动中 poll 函数执行。...二、两种操作 阻塞地读取一个字符: char buf; fd = open("/dev/ttyS1",O_RDWR); ..... res = read(fd,&buf,1); //当串口上有输入时才返回...=1); //串口上没有输入则返回,所以循环读取 printf("%c/n",buf); 阻塞操作常常用等待队列来实现,而非阻塞操作用轮询的方式来实现。...void) { int fd,num; char rd_ch[BUFFER_LEN]; fd_set rfds,wfds; //读写文件描述符集 //以非阻塞方式打开

5.4K20

linux阻塞与非阻塞(connect连接超时)

阻塞connect详情介绍可以参见文章:https://blog.csdn.net/qq_41453285/article/details/89890429 一、非阻塞connect概述 man手册...解析文档,非阻塞connect如何使用: ①当我们将sock设置为非阻塞之后,使用connect去连接服务端,即使服务端开启了,connect系统调用也不会连接成功,connect而是以失败告终,并返回错误...②但是非阻塞connect返回的错误是有讲究的: 如果非阻塞connect返回的错误是EINPROGRESS,代表不是connect系统调用出错了,而是connect可能会在后面才会建立完整地连接(...,进一步来等待非阻塞connect客户端与服务端建立完整地连接,在等待的过程中,如果非阻塞connect建立成功了,客户端的sock_fd就会变成可写的(这个在本人的IO复用文章中介绍过,见下图) ④当非阻塞...在有些系统(比如Linux)上返回-1,而在有些系统上(比如源自伯克利的UNIX)返回0 这些问题没有一个统一的解决办法 三、编码演示案例 #include #include <stdlib.h

6.1K10

Linux基础(串口编程)

虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接通常特指那些与RS-232标准兼容的硬件或者调制解调器的接口。废话少讲,今天来解剖使用串口时的编程代码细节。...上面的代码是使用串口的第一步,来解释下都是啥意思。...来瞧瞧: 第21-22行,定义了一个用来配置串口属性的结构体: struct termios serial; bzero(&serial, sizeof(serial)); 第24行,将串口设置为raw...: tcsetattr(fd,TCSANOW,&serial); 当然,上面的 fd 就是系统中的某一个你想要设置的成上面那样的属性参数的串口,比如就拿粤嵌GEC210开发板来说,他有四个串口,其中第一个就已经被用于终端控制了...,那我们可以打开第二个串口来设置: int fd = open(“/dev/s3c2410_serial1”, O_RDWR | O_NOCTTY); 好了,今天就扯到这里,这几天都是代码的玩意儿,比较专业比较枯燥比较蒙圈

12.6K20

Linux 查看本机串口方法

最近在了解嵌入式方面的知识,就随笔记录一下: 查看Linux本机串口: 1、查看串口是否可用    可以对串口发送数据比如对com1口,echo /dev/ttyS0 2、查看串口名称使用    ls...-l /dev/ttyS*   一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS*,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的; 3、...查看串口驱动    cat/proc/tty/drivers/serial 4、查看串口设备    dmesg | grep ttyS* 5、查一下板子上的串口有没有设备    grep tty/proc.../dev下应该有一个USB串口:/dev/ttyUSB0. 当一个串行卡或数据卡被侦测到时,它会被指定成为第一个可用的串行设备。...PC上的串口一般是ttyS,板子上Linux串口一般叫做ttySAC; 串口使用: 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0

21K20

Linux编程(阻塞的概念)

阻塞。 好吧,再来一点营养。阻塞是啥意思呢? 就是水管堵住了!扭开水龙头没有水出来。...这个道理跟Linux下读取慢速设备(主要指管道和套接字)数据的情形非常相似,例如当我们在读取一个管道时,如果管道里面没有数据,那么我们什么都读不出来,于是就进入了所谓的“阻塞”状态了,说白了阻塞就是使得当前进程或者线程睡眠了的意思...那么再进一步,什么时候会阻塞呢?下面的表格简单描述了这些清空: ? 其中,读者指的是对管道文件拥有读权限的进程或线程(注意不是正在读),写者指的是对管道文件拥有写权限的进程或线程(注意不是正在写)。...除此之外,其实open()函数也会发生阻塞,比如用只读或者只写open一个管道文件的时候。因为一根只有出口或者只有入口的水管,是无法使用的呀!其实就是生活常识。嘿嘿!

2.1K30

Linux 串口的基本用法

查看Linux本机串口: 1、查看串口是否可用 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0 常用的调试工具有: minicom...cutecom Linux系统可视化串口应用软件,使用上与Windows系统串口调试工具。 picocom 效果上类似 minicom 的精简版,设置比较简单,还可以有背景颜色。...PC上的串口一般是ttyS,板子上Linux串口一般叫做ttySAC; 串口权限问题 临时调试解决 在使用串口进行通信时,经常需要使用指令来赋予用户读写的权限 $ sudo chmod 777 /dev...查看linux所有用户 使用 /etc/passwd 文件 使用任何一个像 cat、more、less 等文件操作命令来打印 Linux 系统上创建的用户列表。.../etc/passwd 是一个文本文件,其中包含了登录 Linux 系统所必需的每个用户的信息。

9.7K41

linux源码看socket的阻塞和非阻塞

linux源码看socket的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 大部分高性能网络框架采用的是非阻塞模式。...笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。 本文源码均来自采用Linux-2.6.24内核版本。...\非阻塞状态 我们用fcntl修改socket的阻塞\非阻塞状态。...阻塞后什么时候恢复运行呢 情况1:有对应的网络数据到来 首先我们看下网络分组到来的内核路径,网卡发起中断后调用netif_rx将事件挂入CPU的等待队列,并唤起软中断(soft_irq),再通过linux...希望笔者这篇文章能帮助到阅读linux网络协议栈代码的人。

3.5K20

嵌入式Linux串口编程

简介 嵌入式Linux串口编程与Linux系统下的编程没有什么区别,系统API都是一样的。...RS232与RS485在使用上的区别,RS232是全双工的,只能对接一个设备串口设备。RS485是半双工的总线协议,一般可以挂多个传感器设备,半双工的意思是同时只能有一个设备向串口发数据。...用到的API函数 函数 说明 open 打开设备,用于打开串口设备 fcntl 修改设备描述符属性参数 isatty 检测打开的描述符是否指向一个终端 tcgetattr 用来获取串口终端参数 cfmakeraw... #include "uart.h" /*************************************** *name : open_port *功能描述: 打开串口...old_cfg) < 0){ perror("tcgetattr"); return -1; } if(fcntl(fd,F_SETFL,0) < 0)//恢复为阻塞模式

13K20

嵌入式Linux系列第7篇:操作UART

1 引言 串口是我们实际工作中经常使用的一个接口,比如我们在Linux下使用的debug串口,它用来登录Linux系统,输出log。...5 UART操作 5.1.命令行操作 我们将板子上的两个串口同时和PC机连接,通过debug串口登录Linux系统操作UART1,PC端打开串口调试助手,选择UART1对应的串口,这样板子通过UART1...所以千万不要直接用cat去判断串口是否有数据接收,为什么有时能收到呢,那是因为串口设备在某个地方被打开(调用了open函数)了。...所谓阻塞和非阻塞的含义如下: 阻塞: 对于read,指当串口输入缓存区没有数据的时候,read函数将会阻塞在这里,直到串口输入缓存区中有数据可读取,read读到了需要的字节数之后,返回值为读到的字节数;...在打开串口文件时,打开模式加上O_NDELAY可以以非阻塞方式打开串口;反之,不加上O_NDEAY,默认以阻塞方式打开串口

3K20

fcntl系统调用

linux串口阻塞和非阻塞操作  有两个可以进行控制串口阻塞性(同时控制read和write):一个是在打开串口的时候,open函数是否带O_NDELAY;第二个是可以在打开串口之后通过fcntl(...阻塞的定义:  对于read,block指当串口输入缓冲区没有数据的时候,read函数将会阻塞在这里,移植到串口输入缓冲区中有数据可读取,read读到了需要的字节数之后,返回值为读到的字节数; 对于...write,block指当串口输出缓冲区满,或剩下的空间小于将要写入的字节数,则write将阻塞,一直到串口输出缓冲区中剩下的空间大于等于将要写入的字节数,执行写入操作,返回写入的字节数。...非阻塞的定义: 对于read,no block指当串口输入缓冲区没有数据的时候,read函数立即返回,返回值为0。...\n"); } printf("fd-open=%d\n",fd); return fd; } 所以,linux串口阻塞性通过fcntl

1.3K30
领券