![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux服务器开发笔记
文章平均质量分 64
123456
654654654654654
12345
展开
-
linux服务器开发问题(tcp粘包)
a. 成功执行时,返回接收到的字节数。另一端已关闭则返回0。b. 失败返回-1,errno被设为以下的某个值EAGAIN:套接字已标记为非阻塞,而接收操作被阻塞或者接收超时EBADF:sock不是有效的描述词ECONNREFUSE:远程主机阻绝网络连接EFAULT:内存空间访问出错EINTR:操作被信号中断EINVAL:参数无效ENOMEM:内存不足ENOTCONN:与面向连接关联的套接字尚未被连接上ENOTSOCK:sock索引的不是套接字c. 当返回值是0时,为正常关闭连接;在使用非阻原创 2022-10-24 10:58:31 · 1224 阅读 · 0 评论 -
linux服务器开发(mmap函数ummp函数)
参数1:要映射到的内存区域的起始地址,通常都是用NULL(NULL即为0)。NULL表示由内核来指定该内存地址参数2:要映射的内存区域的大小参数3:期望的内存保护标志,不能与文件的打开模式冲突。是以下的某个值,可以通过or运算(‘|’)合理地组合在一起参数4:指定映射对象的类型,映射选项和映射页是否可以共享。它的值可以是一个或者多个以下位的组合体参数5:文件描述符(由open函数返回)参数6:表示被映射对象(即文件)从哪里开始对映,通常都是用0。原创 2022-10-22 18:16:08 · 393 阅读 · 0 评论 -
linux服务器开发(c语言下文件操作)
inux下的大部分文件/目录处理函数都需包含头文件:#include ,少部分需包含或原创 2022-10-22 17:26:18 · 167 阅读 · 0 评论 -
linux服务器开发(获取文件属性信息)stat()函数
/文件的设备编号//节点//文件的类型和存取的权限//连到该文件的硬连接数目,刚建立的文件值为1//用户ID//组ID//(设备类型)若此文件为设备文件,则为其设备编号//文件字节数(文件大小)//块大小(文件系统的I/O 缓冲区大小)//块数//最后一次访问时间//指最近修改文件内容的时间//指最近改动Inoed的时间};原创 2022-10-22 16:09:31 · 382 阅读 · 0 评论 -
c语言常见函数<sting.h>字符串处理函数
PS: size_t 是 long long 类型。原创 2022-10-22 13:37:39 · 763 阅读 · 0 评论 -
Linux服务器开发(LE和LT模式介绍)
之前关于介绍了EPOLLONESHOT:《inux服务器开发epoll的使用(EPOLLONESHOT的作用及如何使用)长连接短连接,粘包问题》;设置EPOLLONESHOT的目的是为了防止同时使用套接字connfd,每次重新使用connfd使用EPOLL_CTL_MOD将其重新加入epoll队列中才能被epoll_wait();检测到;回顾一下为什么使用EPOLLONESHOT;简单点来讲就是:同一时间不应该有多个工作线程使用同一个connfd,否则会产生网络错误;原创 2022-10-21 16:00:32 · 1213 阅读 · 0 评论 -
linux服务器开发epoll的使用(EPOLLONESHOT的作用及如何使用)长连接短连接,粘包问题
而如果close(connfd),可以使用EPOLL_CTL_MOD再次添加该事件到内核事件表中,即再次建立短连接,具体重启短连接,与短连接的方法在服务器端的worker函数中已经详细介绍;对于listen_sockfd我们应该让它一直处于epoll事件队列,而对于connfd我们应该让其处于不使用就关闭,要使用就开启的状态;也就是我们通常说的listen_sockfd应该处于长连接,而connfd处于短连接;作用:避免竞争文件描述符(这里是网络编程,那就是避免竞争套接字);原创 2022-10-20 21:08:19 · 1044 阅读 · 0 评论 -
linux服务器开发(客户端崩溃,防止服务器进程终止)signal(SIGPIPE, SIG_IGN);
CLOSED表示初始状态。LISTEN这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。SYN_RCVD这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。SY原创 2022-10-20 13:18:14 · 273 阅读 · 0 评论 -
linux服务器开发(定时器函数)alarm和slepp
参数:系统睡眠时间返回值:剩余睡眠时间作用:让进程(线程是轻量级的进程,也算进程)进入睡眠状态;原创 2022-10-20 13:17:18 · 710 阅读 · 0 评论 -
linux服务器开发(I/O多路复用技术)epoll的使用
其中data用来存放套接字;其中events能够是下面几个宏的集合:EPOLLIN :表示相应的文件描写叙述符能够读(包含对端SOCKET正常关闭);EPOLLOUT:表示相应的文件描写叙述符能够写。EPOLLPRI:表示相应的文件描写叙述符有紧急的数据可读(这里应该表示有带外数据到来);EPOLLERR:表示相应的文件描写叙述符错误发生;EPOLLET: 将EPOLL设为边缘触发(Edge Triggered)模式。这是相对于水平触发(Level Triggered)来说的。原创 2022-10-19 17:53:32 · 426 阅读 · 0 评论 -
linux服务器开发(管道创建) socketpair()
第2个参数:可以被指定为SOCK_DGRAM或SOCK_STREAM。SOCK_STREAM相当于创建一个双向管道。每个socket都可以用来读取和写入,并且这两个socket之间每个方向上的数据道是分开的。参数1:必须指定为PF_UNIX或AF_UNIX。功能:创建一对无名,相互连接的套接字。返回值:成功返回0,失败返回非0。第三个参数指定创建的2个套接字。原创 2022-10-19 16:55:44 · 202 阅读 · 0 评论 -
linux服务器开发(基本网络编程)
第一个参数:套接字第二个参数:协议层SOL_SOCKET、IPPROTO_IP、IPPROTO_TCP第三个参数:需设置的选项如:SOL_SOCKETSO_BROADCAST 允许发送广播数据 intSO_DEBUG 允许调试 intSO_DONTROUTE 不查找路由 intSO_ERROR 获得套接字错误 intSO_KEEPALIVE 保持连接 int。原创 2022-10-18 17:47:14 · 1166 阅读 · 0 评论 -
linux服务器开发(线程创建及信号量部分)pthread_xxx();sem_xxx();
pthread_t 存放线程标识的变量;功能:用来存放pthread_create()过去的线程标识符;原创 2022-10-18 12:10:04 · 279 阅读 · 0 评论 -
Linux服务器开发(线程控制)pthread_mutex_xxx(),和pthread_cond_xxx()实现线程同步功能
实际上对于锁的初始化可以使用(动态初始化)pthread_mutex_init(&锁名,NULL);也可以使用其他方式:(静态初始化)pthread_mutex_t 锁名=PTHREAD_MUTEX_INITIALIZER;其中PTHREAD_MUTEX_INITALIZER是一个结构体变量的宏定义;第一个参数:定义的条件变量的地址第二个参数:定义的条件变量的属性,NULL为默认缺省类型返回值:成功返回0,失败返回非0功能:初始化条件变量条件变量和互斥锁一样,原创 2022-10-16 20:52:49 · 363 阅读 · 0 评论 -
linux服务器开发(网络编程部分)atoi()函数,,atol()函数
函数原型返回值 int类型参数类型:const 字符型指针作用,将字符型数据转化为整型数据。原创 2022-10-16 15:20:36 · 152 阅读 · 0 评论 -
linux服务器开发(日志部分)snprintf()
buf:接收数据的缓冲区;size:接收数据的大小;format:如%d%s等,指定输出数据的格式…: 输出到缓冲区中的数据返回值:失败返回负数,返回输入数据的总字节数。原创 2022-10-16 15:08:54 · 480 阅读 · 0 评论 -
linux服务器开发笔记(日志部分)strrchr()及strchr()
它表示在字符串 s 中查找字符 c,返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。也就是说,strchr 函数在字符串 s 中从前到后(或者称为从左到右)查找字符 c,找到字符 c 第一次出现的位置就返回,返回值指向这个位置,如果找不到字符 c 就返回 NULL。与 strchr 函数一样,它同样表示在字符串 s 中查找字符 c,返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。原创 2022-10-16 13:16:34 · 566 阅读 · 0 评论 -
linux服务器本地时间获取(日志部分)time(NULL),localtime()
值得注意的是年份的初始时间是以1900年为基准的,因此如果我们获取到的时间如1900年,结构体中的tm_year实际上是0年;然后调用localtime(&t)将秒数进行转化,并返回处理好数据的结构体的指针;我们通过time(NULL)获取当前日期的秒数并且将该秒数赋值给t。然后通过返回的指针访问结构中的变量从而获取对应的时间日期;time_t 实际上是一个long类型。原创 2022-10-16 12:25:16 · 466 阅读 · 0 评论