Linux编程下open()函数的用法「建议收藏」

Linux编程下open()函数的用法「建议收藏」Linux编程下open()函数的用法open(打开文件)相关函数:read,write,fcntl,close,link,stat,umask,unlink,fopen表头文件:#include#include#include定义函数:intopen(constchar*pathname,intflags);intope

大家好,又见面了,我是你们的朋友全栈君。

Linux编程下open()函数的用法

open(打开文件) 
相关函数:
 read,write,fcntl,close,link,stat,umask,unlink,fopen 

表头文件 :
#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);

返回值:若所有欲核查的权限都通过了检查则返回0 值,表示成功,只要有一个权限被禁止则返回-1。

一般的写法是if((fd=open(“/dev/ttys0”,O_RDWR | O_NOCTTY | O_NDELAY)<0)
{

 perror(“open”);
}
这个事常用的一种用法fd是设备描述符,linux在操作硬件设备时,屏蔽了硬件的基本细节,
只把硬件当做文件来进行操作,而所有的操作都是以open函数来开始,它用来获取fd,
然后后期的其他操作全部控制fd来完成对硬件设备的实际操作。你要打开的/dev/ttyS0,代表的是串口1,
也就是常说的com1,后面跟的是一些控制字。

函数说明:
第一个参数pathname 指向欲打开的文件路径字符串。

第二参数flags 所能使用的旗标:
1.O_RDONLY 只读打开。
2.O_WRONLY 只写打开。
3.O_RDWR 读、写打开。
4.O_APPEND 每次写时都加到文件的尾端。
5.O_CREAT 若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode,用其说明该新文件的存取许可权位。
6.O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作。
7.O_TRUNC 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0。
8.O_NOCTTY 如果pathname指的是终端设备,则不将此设备分配作为此进程的控制终端。
9.O_NONBLOCK 如果pathname指的是一个F I F O、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I / O操作设置非阻塞方式。
10.O_NDELAY所产生的结果使I/O变成非阻塞模式(non-blocking),在读取不到数据或是写入缓冲区已满会马上return,而不会阻塞等待。
11.O_SYNC 使每次w r i t e都等到物理I / O操作完成。
12.O_APPEND 当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。
13.O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接,则会令打开文件失败。
14.O_DIRECTORY 如果参数pathname 所指的文件并非为一目录,则会令打开文件失败。

注意:

(1)这些控制字都是通过“或”符号分开(|)
(2)O_NONBLOCK和O_NDELAY所产生的结果都是使I/O变成非阻塞模式(non-blocking),在读取不到数据或是写入缓冲区已满会马上return,而不会阻塞等待。
它们的差别在于:在读操作时,如果读不到数据,O_NDELAY会使I/O函数马上返回0,但这又衍生出一个问题,因为读取到文件末尾(EOF)时返回的也是0,这样无法区分是哪种情况。因此,O_NONBLOCK就产生出来,它在读取不到数据时会回传-1,并且设置errno为EAGAIN。
O_NDELAY是在System V的早期版本中引入的,在编码时,还是推荐POSIX规定的O_NONBLOCK,O_NONBLOCK可以在open和fcntl时设置

(3)Linux2.2以后特有的旗标,以避免一些系统安全问题。参数mode 则有下列数种组合,只有在建立新文件时才会生效,此外真正建文件时的权限会受到umask值所影响,因此该文件权限应该为(mode-umaks)。
S_IRWXU00700 权限,代表该文件所有者具有可读、可写及可执行的权限。
S_IRUSR 或S_IREAD,00400权限,代表该文件所有者具有可读取的权限。
S_IWUSR 或S_IWRITE,00200 权限,代表该文件所有者具有可写入的权限。
S_IXUSR 或S_IEXEC,00100 权限,代表该文件所有者具有可执行的权限。
S_IRWXG 00070权限,代表该文件用户组具有可读、可写及可执行的权限。
S_IRGRP 00040 权限,代表该文件用户组具有可读的权限。
S_IWGRP 00020权限,代表该文件用户组具有可写入的权限。
S_IXGRP 00010 权限,代表该文件用户组具有可执行的权限。
S_IRWXO 00007权限,代表其他用户具有可读、可写及可执行的权限。
S_IROTH 00004 权限,代表其他用户具有可读的权限
S_IWOTH 00002权限,代表其他用户具有可写入的权限。
S_IXOTH 00001 权限,代表其他用户具有可执行的权限。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141419.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 视频传输协议(常用的视频协议)

    SDP协议RTPRTCPSRTPRTP只负责传输数据包,需要与RTCP配合使用,由RTCP来保证RTP数据包的服务质量。每一个RTP数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。整个IP报文由IP报头、UDP报头、RTP报头、RTPPayload(音频或视频数据)组成, IP协议最大传输单元(MTU)最大为1500字节,其中包括至少20字节的IP头、8字节的UDP头、12字节的RTP头, 这样,头信息

  • Javascript作用域问题的构造函数的变量

    Javascript作用域问题的构造函数的变量

  • 771性价比最高cpu_e5 2660相当于什么cpu

    771性价比最高cpu_e5 2660相当于什么cpu该楼层疑似违规已被系统折叠隐藏此楼查看此楼AMDA8-6500TAPU3517InsufficientdataAMDAthlonIIX46453516502IntelPentiumG3430@3.30GHz3507503AMDPhenomIIX4B403500504AMDPhenomIIX49253496506IntelXeonE5-…

  • java拦截器_Java拦截器实现「建议收藏」

    java拦截器_Java拦截器实现「建议收藏」java拦截器实现功能类似于aop功能的实现,实现拦截部分方法,一般用于类似登录进入A页面,未登录进入B页面实现方法有两种实现Interceptor接口或者继承HandlerInterceptorAdapter类,实现接口需要实现其中所有方法,继承抽象类则一般实现preHandle方法即可。首先配置拦截类packagenet.parim.spark.portal.adapter;im…

  • 单片机声源定位_基于stm32交通灯源代码

    单片机声源定位_基于stm32交通灯源代码stm32声源定位本科毕业设计(论文)基于STM32单片机声源方向识别器设计与实现摘要近年来,基于麦克风阵列的声源定位系统被广泛地应用于电话会议、视频会议、语音增强、助听器等系统中,因此受到了越来越多的关注,已经成为一大研究热点。在各种声源定位方法中,基于到达时延估计的双步定位法原理简单,运算量小,精度相对较高,有利于实时实现,因此它的应用也最为广泛,本文着重研究了该方法。本文首先给出了麦克风阵列…

  • sql聚合函数_SQL聚合函数

    sql聚合函数_SQL聚合函数sql聚合函数SQLAggregateFunctionsbasicallyoperateonmultiplecolumnstoperformtheoperationsandservetorepresenttheoutputasanentityrepresentingtheoperationexecuted.SQL聚合函数基本上在多个列上进行操作以执…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号