_03_linux应用编程
文章平均质量分 57
llzhang_fly
这个作者很懒,什么都没留下…
展开
-
文件IO、标准IO的区别及其效率
系统IO:Unix/Linux下的系统文件IO,即文件访问机制不经过操作系统内核的缓存,数据直接在磁盘和应用程序地址空间进行传输。标准IO:带缓存的IO,又称为标准IO(C标准库中提供了标准IO库,即stdio),它实现了跨平台的用户缓存解决方案。文件IO 和 标准IO的概念【文件I/O】文件I/O是操作系统封装了一系列open、close、write、read等API函数构成的一套用来读、写文件的接口供应用程序使用,通过这些接口可以实现对文件的读写操作,但是效率并不是最...原创 2021-09-05 18:02:28 · 5906 阅读 · 0 评论 -
linux中 select() 函数的第一个参数为什么是监听的最大描述符加1呢
select() 函数原型: /* According to POSIX.1-2001 */ #include <sys/select.h> /* According to earlier standards */ #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int se原创 2021-09-05 16:41:41 · 1308 阅读 · 0 评论 -
IO多路复用之select总结
IO多路复用之select总结1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。 (4)如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用转载 2021-04-20 23:36:52 · 160 阅读 · 0 评论 -
select()和accept()区别、socket编程:服务器如何判断是否有客户端发起链接请求
参考:https://blog.csdn.net/lsgqjh/article/details/65629609select:查看指定fd_set中socket状态,如果fd_set中有套接字准备就绪(触发(读、写或执行)),则会返回,返回值为触发的套接字个数accept:经过创建套接字socket()绑定bind()以及listen()之后,将监听socket和客户端socket建立一个全新连接,并返回client的socket信息;判断是否有客户端发起链接请求, 一般用select(),.转载 2021-04-20 23:21:40 · 1639 阅读 · 0 评论 -
fopen 用ab+打开,读、写文件时,指针在哪里
【问题】打开文件都是向文件添加数据,就是以a+方式打开,用ftell函数直接得到当前位置,如果不为0,则说明文件不为空;但调试发现打开文件后用ftell函数得到的当前位置值为零?ab+表示以二进制方式打开,数据写入时在原内容后追加;打开后指针在文件头部(所以 ftell() 获取的当前文件中已写入的数据长度为0);但是fwrite的时候会判断打开模式,如果是ab+则移动到文件尾再写入ftell() 功能:获取当前读写位置偏离文件头部的字节数.总结:1)用fopen函数打开文件时,文件指针原创 2021-04-02 21:22:08 · 7983 阅读 · 0 评论 -
本地进程间通信——Unix域套接字
本地进程间通信机制管道对于本地进程间通信,普通管道提供了相关进程(都有相同的祖先)之间通信的一种方法,但是普通管道存在两种局限性:1)它只能在“相关进程间”(即父子进程)使用; 2)它是半双工的(半双工也就是收发不能同时进行)。命名管道解决了第一个局限性,他能在不相关的进程之间进行数据通信,但是同样具有第二个局限性,即通常他们是半双工的。域套接字消息队列和unix域套接字没有上面所说的局限性的同性方法。使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通原创 2020-09-20 21:48:31 · 6365 阅读 · 0 评论 -
TCP的状态:SYN, FIN, ACK, PSH, RST, URG 简介及 ACK确认机制
1、TCP的状态FLAGS字段状态在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.对于我们日常的分析有用的就是前面的五个字段:它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。其中,ACK是可能与SYN,FIN等同时使用的,比如:SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。T..原创 2020-09-19 05:25:26 · 41775 阅读 · 0 评论 -
信号量与条件变量的区别
问题场景:在实际程序处理中,经常会用到“触发某条件(认证、或判断用户合法性)后,进行一系列的处理,然后将结果返回,若返回结果正确,则继续进行后面的处理,否则退出”;一般等待结果有如下几种处理方式:1)sleep() 死等,然后在 while(1) {} 中判断返回结果的状态; 若有实时性要求,还需要进行超时处理(超时也是处理失败);2)在linux 多任务的系统中,sleep死等必然会导致系统运行实时性差;所以可以使用信号量、共享内存、或者消息队列等通信方式,让线程处于休眠等待状态。3)也可原创 2020-08-01 23:32:56 · 3184 阅读 · 0 评论 -
多线程间的同步与互斥机制——互斥锁与信号量
线程的同步与互斥2019-12-07:(POSIX中2种线程同步机制)因线程共享进程的资源、地址空间,所以对该类资源进行操作时,一定要考虑线程间资源访问同步和互斥的问题;(2种同步机制也可互相通过调用对方来实现)互斥锁:更适合用于同时可用的资源 是唯一的情况;信号量:更适合用于同时可用的资源 为多个的情况;互斥锁:针对线程互斥锁是用一种简单的加锁方法来控制对共享资源的原子操...原创 2019-12-07 23:05:19 · 1269 阅读 · 0 评论 -
pwrite写操作——原子操作,不改变当前文件操作符位置,写入位置offset是一个相对于fd起始地址的偏移量
意外发现,pwrite() 函数是一个原子操作,现测试验证如下: 1 /* 2 pwrite相当于先调用lseek接着调用write。但又不完全是这样: 3 (1)pwrite是原子操作,定位和写操作在一个原子操作中完成,期间不可中断。但分开的lseek和write中间可能被其他程序中断。 4 (2)pwrite不更改当前文件的指针,也就是说不改变当前文件偏移量。 5...原创 2019-07-21 15:13:08 · 2999 阅读 · 0 评论 -
【转载】Linux open文件函数区别:open、fopen、freopen
open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲。linux下的fopen是open的封装函数,fopen最终还是要调用底层的系统调用open,所以在linux下如果需要对设备进行明确的控制,那最好使用底层系统调用(open)。open对应的文件操作有:close, read, write,ioctl 等。fopen 对应的...转载 2019-02-17 15:32:41 · 952 阅读 · 0 评论 -
Linux 文件权限简要说明
目录一、查看文件权限、文件权限类型说明 linux 用户类型 linux 文件权限的基本类型 linux 文件所属组类型二、文件权限的相关设置命令 1) chgmod 功能:设置文件的访问权限 2) chown 功能:改变文件的拥有者 3) chgrp 功能:改变文件或目...转载 2019-02-17 15:05:37 · 453 阅读 · 0 评论 -
Linux pthread_creat() 创建线程失败问题总结
Linux pthread_creat() 创建线程失败问题总结目录问题场景问题详细描述问题分析定位1)pthread_create() 函数原型2)实测系统最多可创建的线程数3)测试结果4)查看shell启动进程所占用的资源默认设置:5)确认系统可创建的最大线程数:问题根因解决方案回收线程资源1)创建的线程状态有两种2)系统自动释放线程资源...原创 2018-11-03 11:09:10 · 19662 阅读 · 3 评论 -
Linux设备驱动之Ioctl控制
转帖地址:https://www.cnblogs.com/geneil/archive/2011/12/04/2275372.htmlhttps://blog.csdn.net/bamboolsu/article/details/43058751 Linux设备驱动之Ioctl控制 大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力。 一、在用户空间,使用i...转载 2018-09-09 23:18:28 · 176 阅读 · 0 评论 -
linux 静态库和动态库应用简介
1. linux/windows 动态库和静态库区别:windows: 动态库: xxx.dll 静态库: xxx.liblinux: 动态库: xxx.so (201806做的项目,使用linux动态库,这样目标程序比较小;如何在makefile中增加动态库的调用) 静态库: xxx.a2. 静态库和动态库区别:1)最大区别: 加载的时刻不同 静态库在程序编译阶段加...原创 2018-06-23 16:54:06 · 308 阅读 · 0 评论