O_NONBLOCK与O_NDELAY有何不同?】的更多相关文章

O_NONBLOCK和O_NDELAY所产生的结果都是使I/O变成非搁置模式(non-blocking),在读取不到数据或是写入缓冲区已满会马上return,而不会搁置程序动作,直到有数据或写入完成. 它们的差别在于设立O_NDELAY会使I/O函式马上回传0,但是又衍生出一个问题,因为读取到档案结尾时所回传的也是0,这样无法得知是哪中情况:因此,O_NONBLOCK就产生出来,它在读取不到数据时会回传-1,并且设置errno为EAGAIN. 不过需要注意的是,在GNU C中O_NDELAY只是…
storysnail的Linux串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Public License,v3 发布 GPLv3 许可证的副本可以在这里获得:http://www.gnu.org/licenses/gpl.html 本文档根据GNU Free Documentation License 1.3发布 GFDL1.3许可证的副本可以在这里获得:http://w…
在串口设置中,有以下两个参数可以决定是否阻塞. 在打开串口时不加O_NODELAY,可用下面的第二种方法,来进行阻塞/非阻塞的设定 c_cc[VTIME] 非规范模式读取时的超时时间(单位:百毫秒),可以这么理解,从接收到后一个字节开始计时,如果超时,则退出READ c_cc[VMIN]  非规范模式读取时的最小字符数,设为0则为非阻塞,如果设为其它值则阻塞,直到读到到对应的数据 关键代码 iFd = open(cSerialName, O_RDWR | O_NOCTTY); opt.c_cc[…
Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用 在串口编程模式下,open未设置O_NONBLOCK或O_NDELAY的情况下. c_cc[VTIME]和c_cc[VMIN]映像read函数的返回. VTIME定义等待的时间,单位是百毫秒(通常是一个8位的unsigned char变量,取值不能大于cc_t). VMIN定义了要求等待的最小字节数,这个字节数可能是0. 如果VTIME取0,VMIN定义了要求等待读取的最小字节数.函数read()只有在读取了VMIN个字节…
http://blog.csdn.net/cywosp/article/details/8767327 SYNOPSIS #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); int creat(con…
aa.stp: probe kernel .function ( "sys_sync" ) { printf ( "probfunc:%s fun:%s\n",execname(),ppfunc()); print_backtrace();print_ubacktrace();exit();} A: [root@localhost ~]# sync B: stap -v aa.stp -d /lib64/libc-2.5.so -d /bin/sync probfu…
用户管理: useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage 组管理: groupadd, groupdel, groupmod, gpasswd 权限管理: chown, chgrp, chmod, umask /etc/passwd: 用户名:密码:UID:GID:注释:家目录:默认SHELL /etc/group: 组名:密码:GID:以此组为其附加组的用户列表 /etc/shadow: 用户名:密码:最近一次…
open函数 int open(const char *pathname, int flags, mode_t mode); 参数说明: (1)pathname: 表示要打开的文件路径 (2)flags: 用于指示打开文件的选项,常用的有O_RDONLY. O_WRONLY和O_RDWR,还有一些选项如下: O_APPEND: 每次进行写操作时, 内核都会先定位到文件尾, 再执行写操作 O_ASYNC: 使用异步I/O模式 O_CLOEXEC: 在打开文件的时候, 就为文件描述符设置FD_CLO…
2.1Linux文件IO概述 2.1.0POSIX规范 POSIX:(Portable Operating System Interface)可移植操作系统接口规范. 由IEEE制定,是为了提高UNIX(也适用于Linux)环境下应用程序的可移植性. 2.1.1虚拟文件系统 Linux具有与其他操作系统和谐共存的能力. Linux文件系统由两层构建:第一层是虚拟文件系统(VFS),第二层是各种不同的具体的文件系统. VFS把各种具体的文件系统的公共部分抽取出来,形成一个抽象层,是系统内核的一部分…
Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> 参考:C和指针学习 说明:本文非常的长,也是为了便于查找和比较,所以放在一起了 Linux 传统的进程间通信有很多,如各类管道.消息队列.内存共享.信号量等等.但它们都无法介于内核态与用户态使用,原因如表 通信方法 无法介于内核态与用户态的原因 管道(不包括命名管道) 局限于父子进程间的通信. 消息队列 在…
Linux 系统中的各种输入输出,设计为"一切皆文件".各种各样的IO统一用文件形式访问. 文件类型及基本操作 Linux 系统的大部分系统资源都以文件形式提供给用户读写.这些文件可以分为: 普通文件:即一般意义上的磁盘文件: 设备文件:系统中的具体设备: 管道文件.FIFO 文件:用于进程间通信: 套接字(socket)文件:用于网络通信方面. 文件的通用操作为:打开.关闭.读.写.创建.对应 Linux 系统的 API 接口函数分别为 open().close().read().w…
SYNOPSIS 总览 #includ e <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode) int creat(const char *pathname, mode_t mode); 描述 (DESCRIPTION)…
串口每次read数据可能不是完整的数据,参照网上的代码,写了拼帧的代码#include <stdio.h> #include <termios.h> #include <unistd.h> #include <fcntl.h> #include <strings.h> #include <sys/time.h> #include <sys/types.h> int speed_arr[] = { B115200, B576…
It seems that writes/reads to regular files can't not be made non-blocking. I found the following references for support: from The Linux Programming Interface: A Linux and UNIX System Programming Handbook: "--- Nonblocking mode can be used with devic…
后台网络通信框架一般采用fifo来作为事件通知的机制:创建一个fifo,然后以非阻塞读和非阻塞写的方式打开fifo,然后把fd加到epoll里面,作为通知网络事件的fd. 在这里有个隐晦的问题容易被忽视.fifo在以非阻塞模式打开时,必须先打开读,然后打开写.不然会报错No such device or address.即如下代码所示是正确的 #define FIFO_FILE "/tmp/fifo.xxx" #define FIFO_MODE FILE_MODE S_IRUSR |…
非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:       基本概念: 阻塞IO:: socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会 返回. 非阻塞IO:: 非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方 式来判断具体操作是否成功. IO模式设置: SOCKET       对于一个socket 是阻塞模式还是非阻塞模式有两种方式来处理:: 方法1.fcntl 设置;用F_GE…
button_drv.c驱动文件: #include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <asm/io.h> #include <asm/uaccess.h> #include <linux/device.h> #include <asm/arch/regs-gpi…
转自:http://blog.csdn.net/yikai2009/article/details/8653697 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 阻塞 阻塞操作 非阻塞操作 阻塞方式-read- 实现 阻塞方式-write- 实现 非阻塞方式的读写操作 实例 --- 读阻塞的实现 实例 --- 按键驱动阻塞实现 1在 open 函数 查看看是 阻塞方式 还是 非阻塞方式 2在 read 函数中同样查看 3应用程序中 1以阻塞方式运行 2以非阻塞方式运…
sys/types.h 是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型. 在应用程序源文件中包含 <sys/types.h> 以访问 _LP64 和 _ILP32 的定义.此头文件还包含适当时应使用的多个基本派生类型.尤其是以下类型更为重要: clock_t 表示系统时间(以时钟周期为单位). dev_t 用于设备号. off_t 用于文件大小和偏移量. ptrdiff_t 是一种带符号整型,用于对两个指针执行减法运算后所得的结果. si…
参考:RPi Serial Connection 本文来自:http://www.raspberry-projects.com/pi/programming-in-c/uart-serial-port/using-the-uart Using the UART If you are running Raspbian or similar then the UART will be used as a serial console.  Using a suitable cable, such as…
在Python中,你使用socket.setblocking(0)使它无阻塞.在C中,它更复杂,(一方面,你需要在BSD风格O_NONBLOCK和几乎不可区分的Posix风味O_NDELAY之间进行选择,这完全不同于TCP_NODELAY),但它是完全相同的想法.你在创建套接字之后,但在使用之前这样做. (实际上,如果你坚果,你可以来回切换.) 主要的机械差异是send,recv,connect和accept可以返回而没有做任何事情.你有(当然)一些选择.你可以检查返回码和错误代码,一般驱使自己…
文件描述符(File Descriptor) a small, nonnegative integer for use in subsequent system calls (read(2), write(2), lseek(2), fcntl(2), etc.) ($man 2 open). 一个程序开始运行时一般会有3个已经打开的文件描述符: 0 :STDIN_FIFLENO,标准输入stdin 1 :STDOUT_FILENO,标准输出stdout 2 :STDERR_FILENO,标准错…
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准.串口通讯指的是计算机依次以位(bit)为单位来传送数据,串行通讯使用的范围很广,在嵌入式系统开发过程中串口通讯也经常用到通讯方式之一.Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设…
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ======================================================== 参考资料: GPS数据包分析:http://www.cnblogs.com/csMapx/archive/2011/11/02/2232663.html 手机定位原理,关于GPS&GLONASS&北斗:http://www.cnblogs.c…
poll函数与select函数的功能基本一样,其定义如下: #include <poll.h> int poll(struct pollfd fds[], nfds_t nfds, int timeout): 参数说明: struct pollfd{ int fd;              //文件描述符 short events;    //请求的事件 short revents;   //返回的事件 }; fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的S…
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:(按贡献大小排名)鄢曼君 李子璇 学号:(按贡献大小排名)20145227 20145201 成绩: 指导教师:娄嘉鹏 实验日期:2016.11.3 实验密级:无 预习程度:已预习 实验时间:10:00-12:30 仪器组次: 必修/选修:必修 实验序号:02 实验名称:固件开发 实验目的与要求: 1.学习.读懂 02_pthread 03_tty中的代码: 2.熟悉 linux 开发环境,学会基于…
文件描述字(file descriptor,fd)是系统中用来唯一记录当前已经打开的文件的标识号,fd是一个整数. 除了file对象外,Python还提供对fd的操作,对fd的操作更加底层,fd和Python中的file对象是不同的概念.在介绍file对象时已经提过,调用 f.fileno() 可以获得一个文件对象的fd,也可以在一个已有的 fd 上在封装一个 file 对象:f = os.fdopen(fd). 一些 fd 是一个进程创建时事先分配好的: 0——进程的stdin 1——进程的s…
这是文件I/O的常用函数,open函数,open函数用来打开一个设备,他返回的是一个整型变量,如果这个值等于-1,说明打开文件出现错误,如果为大于0的值,那么这个值代表的就是文件描述符.一般的写法是if((fd=open("/dev/ttys0",O_RDWR | O_NOCTTY | O_NDELAY)<0){perror("open");}这个事常用的一种用法fd是设备描述符,linux在操作硬件设备时,屏蔽了硬件的基本细节,只把硬件当做文件来进行操作,而…
linux下使用write\send发送数据报 EAGAIN : Resource temporarily unavailable 错 首先是我把套接字设置为异步的了,然后在使用write发送数据时采取的方式是循环发送大量的数据:由于是异步的,write\send将要发送的 数据提交到发送缓冲区后是立即返回的,并不需要对端确认数据已接收.在这种情况下是很有可能出现发送缓冲区被填满,导致write\send无法再向缓冲 区提交要发送的数据.因此就产生了Resource temporarily un…
/*  本程序符合GPL条约  *  Beneboy 2003-5-16 */ #include <stdio.h>              // printf #include <fcntl.h>              // open #include <string.h>             // bzero #include <stdlib.h>             // exit #include <sys/times.h>…