
Linux C 文件IO
文章平均质量分 64
通过 demo 让大家了解 LinuxC 的 文件IO操作
Super小白&
奋斗的小白
展开
-
08、LinuxC -- IO多路复用 poll函数
这个数组就相当于select的文件描述符集合,只不过select是使用fd_set来定义的,而poll的集合是一个数组。如果文件描述符“发生的事件”==“实际事件”,就说明希望的事件来了,就是对fd进行相应的“读或写”操作。监听集合没无动静,如果没有动静就阻塞,如果有动静就成功返回,返回值为集合中有动静的fd的数量。因为无法获取具体哪个文件描述符发生变化,只能进行全盘轮询,随着监听的文件描述符增多,效率下降;poll 监听时如果没有动静就阻塞,有动静就不再阻塞,返回有动静的fd的数量。原创 2023-07-31 16:36:19 · 180 阅读 · 0 评论 -
07、LinuxC -- IO多路复用 select函数
2、因为无法获取具体哪个文件描述符发生变化,只能进行全盘轮询,随着监听的文件描述符增多,效率下降;3、所监听的文件描述符都必须从用户空间传入内核空间进行监听,涉及到大量的数据拷贝,效率低;1、采用数组的方式保存监听的文件描述符,由于数组的空间分配方式(静态分配),个数受限;在调用select后使用FD_ISSET来检测文件描述符集fdset中的文件fd发生了变化。宏FD_ SET将文件描述符fd添加到文件描述符集fdset中;maxfd:文件描述符的范围,比待检的最大文件描述符大1。原创 2023-07-31 16:06:25 · 127 阅读 · 1 评论 -
06、LinuxC -- 系统调用 fcntl函数
4.获得/设置异步 I/O 所有权(cmd=F_GETOWN 或 F_SETOWN).5.获得/设置记录锁(cmd=F_GETLK,F_SETLK 或 F_SETLKW)第三步:写:将改后的标志位设置回去 fcntl(0,F_SETFL,flags);第一步:读,获取之前的标志位:flags = fcntl(0,F_GETFL);2.获得/设置文件描述符标记(cmd=F_GETFD 或 F_SETFD).3.获得/设置文件状态标记(cmd=F_GETFL 或 F_SETFL).fd:目标文件描述符。原创 2023-07-31 11:13:59 · 179 阅读 · 1 评论 -
05、LinuxC -- 系统调用 mmap函数 存储映射
内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;调用成功,返回映射的起始虚拟地址,失败则返回(void*)NULL,errno被设置。原创 2023-07-31 10:29:47 · 305 阅读 · 1 评论 -
04、LinuxC -- 系统调用 wirte,read,lseek函数
通过系统调用 读一行写一行 实现文件拷贝 demo原创 2023-07-30 21:08:19 · 382 阅读 · 1 评论 -
03、LinuxC -- 系统调用 close函数
若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。1、EBADF 表示参数 fd 非已打开的文件的文件描述符。close( )用来关闭open( )打开的文件。原创 2023-07-30 16:28:10 · 819 阅读 · 1 评论 -
02、LinuxC -- 系统调用 open函数
文件若不存在则建立该文件,否则将导致打开文件错误。4、O_TRUNC:若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来存于该文件的资料也会消失。3、S_IWUSR:或S_IWRITE,00200权限,代表该文件所有者具有可写入的权限。2、S_IRUSR:或S_IREAD,00400权限,代表该文件所有者具有可读取的权限。4、S_IXUSR或S_IEXEC:00100权限,代表该文件所有者具有可执行的权限。1、S_IRWXU:00700权限,代表该文件所有者具有可读、可写及可执行的权限。原创 2023-07-30 16:17:34 · 588 阅读 · 1 评论 -
01、LinuxC -- 系统调用 creat函数
creat( ) 会返回新的文件描述词,若有错误发生则会返回-1,并把错误代码设给errno。2、EACCESS 参数pathname所指定文件不符合所要求测试的权限。4、EFAULT 参数pathname指针超出可存取的内存空间。3、EROFS 欲打开写入权限的文件存在于只读文件系统内。1、EEXIST 参数pathname所指的文件已存在。9、ELOOP 参数pathname有过多符号连接问题。10、EMFILE 已达到进程可同时打开的文件数上限。5、EINVAL 参数mode不正确。原创 2023-07-30 15:25:30 · 310 阅读 · 1 评论