随笔分类 -  Linux环境编程

摘要:1、安装libjwt github下载libjwt, libjwt依赖jansson和openssl,先下载编译openssl和jansson 安装openssl,参考 基于openssl的ssl通信 - ho966 - 博客园 安装jansson,就正常cmake即可, cmake .. -DCM 阅读全文
posted @ 2025-07-05 17:06 ho966 阅读(94) 评论(0) 推荐(0)
摘要:pid_t tid = syscall(SYS_gettid); 阅读全文
posted @ 2024-12-23 11:21 ho966 阅读(24) 评论(0) 推荐(0)
摘要:#include <unistd.h>#include <thread>int GetCpuNumber(){ return sysconf(_SC_NPROCESSORS_CONF);} 阅读全文
posted @ 2024-11-29 10:45 ho966 阅读(23) 评论(0) 推荐(0)
摘要:1、select的实现(fs/select.c) 主要涉及三个函数sys_select() à core_sys_select() à do_select() 每次调用select,都会将用户态的fd拷贝至内核态 do_select()会 1) 循环遍历每一个fd,调用对应的驱动的poll函数,po 阅读全文
posted @ 2024-02-26 15:17 ho966 阅读(48) 评论(0) 推荐(0)
摘要:mallopt函数可以设置malloc内部的一些参数大小 int mallopt(int param,int value) param: M_MXFAST -- fastbin范围的最大值,value值在0~20*sizeof(void*)之间 M_TRIM_THRESHOLD – main_are 阅读全文
posted @ 2023-09-01 14:03 ho966 阅读(755) 评论(0) 推荐(0)
摘要:1、ptmalloc的3个层级:arena、bin、chunk 1) arena a) arena是内存分配区,主线程会创建main arena, 其他线程会创建thread arena, 也就是存在多个arena,这样可以避免锁的竞争。main arena会通过sbrk()来扩容,它始终是一个连续 阅读全文
posted @ 2023-07-23 22:42 ho966 阅读(291) 评论(0) 推荐(0)
摘要:linux的可执行文件都是ELF格式,它肯定是会有个section叫.interp, 这里面保存的是动态链接器的路径。 我们在执行这个ELF格式的可执行文件时,内核会先根据.interp节找到动态链接器,然后把控制权交给动态链接器,由动态链接器去加载依赖的动态库。 1、链接器如何找到依赖的动态库 搞 阅读全文
posted @ 2023-07-05 22:56 ho966 阅读(226) 评论(0) 推荐(0)
摘要:systemd兼容/etc/init.d/目录下的启动脚本,可以自动生成systemd服务,如下举例: main.cpp #include <iostream> #include <unistd.h> int main() { while(1) { std::cout<<"hello world"< 阅读全文
posted @ 2023-06-26 22:37 ho966 阅读(123) 评论(0) 推荐(0)
摘要:pthread_setschedparam设置实时线程失败,返回错误码1-Operation not permitted,操作不被允许。原因是当前控制台程序没有cgroup中权限 两种方式:1、执行如下命令: $$就是当前控制台进程号 echo $$ >> /sys/fs/cgroup/cpu/ta 阅读全文
posted @ 2023-06-20 09:58 ho966 阅读(1635) 评论(0) 推荐(0)
摘要:开发过程中ssl握手失败, 使用demo验证是ok的,说明证书没啥问题,抓包看服务端收到客户端的Server Hello后就回了fin包, 打印ssl的错误信息,00000002:lib(0):func(0):reason(2), 错误码2, 在ssl.h里查看到是 # define SSL_ERR 阅读全文
posted @ 2023-05-10 14:17 ho966 阅读(1299) 评论(0) 推荐(0)
摘要:EAGAIN或EWOULDBLOCK二者应该是一样的,对应的错误码是11, socket在对端关闭后,recv返回的长度为0 socket非阻塞模式下, 如果缓存区没数据,此时recv就会 返回-1,报错误码EAGAIN或EWOULDBLOCK,所以读取失败,要判断是errno是否为EAGAIN或E 阅读全文
posted @ 2022-06-01 17:32 ho966 阅读(730) 评论(0) 推荐(0)
摘要:写一个死锁代码: #include <mutex> #include <thread> #include <chrono> std::mutex s_mtx_1; std::mutex s_mtx_2; int main() { std::thread thread1([&](){ s_mtx_1. 阅读全文
posted @ 2022-04-20 07:37 ho966 阅读(322) 评论(0) 推荐(0)
摘要:123 阅读全文
posted @ 2022-03-16 20:50 ho966 阅读(38) 评论(0) 推荐(0)
摘要:1、通过命令cat /proc/$PID/task/$TID/sched可以查看线程的调度策略和优先级, 0 — SCHED_OTHER 1 — SCHED_FIFO 2 — SCHED_RR 这里的优先级和struct sched_param 里面字段sched_priority的值时反的, 通过 阅读全文
posted @ 2021-01-07 16:46 ho966 阅读(430) 评论(0) 推荐(0)
摘要:1:sudo apt-get install openbsd-inetd2:sudo apt-get install telnetd3:sudo gedit /etc/inetd.conf 如果没有下面这句话,就添加进去:telnet stream tcp nowait root /usr/sbin 阅读全文
posted @ 2020-04-26 19:28 ho966 阅读(230) 评论(0) 推荐(0)
摘要:共享内存允许两个或多个进程共享一个给定的存储区,就是多个进程将同一块物理内存映射到自己的虚拟地址上。因为不需要在客户进程和服务进程之间拷贝,所以是最快的一种IPC。 函数1 #include <sys/shm.h> int shmget(key_t key, size_t size, int fla 阅读全文
posted @ 2020-02-04 23:15 ho966 阅读(164) 评论(0) 推荐(0)
摘要:信号量是一个计数器,用于为多个进程提供对共享数据的访问。 函数1 #include <sys/sem.h> int semget(key_t key, int nsems, int flag); 该函数转换键值获取信号量ID, key键值的获取还是通过ftok函数。 返回值 :成功返回信号量ID, 阅读全文
posted @ 2020-02-04 21:11 ho966 阅读(209) 评论(0) 推荐(0)
摘要:(共享内存,信号量,消息队列等方式时,有System v以及POXIS两种接口类型,这里介绍常用的systemV接口) 内核中的IPC结构(共享内存,信号量,消息队列)都用一个非负整数的标识符(identifier)加以引用。这里的标识符(identifier)是IPC对象的内部名。 为了使多个合作 阅读全文
posted @ 2020-02-03 21:50 ho966 阅读(280) 评论(0) 推荐(0)
摘要:与无名管道不同,有名管道FIFO可以在两个无关进程间使用。 #include <sys/stat.h> int mkfifo(const char* path, mode_t mode); 上述函数用于生成一个FIFO文件,其中的mode参数与open函数中的mode相同。当创建了FIFO文件后,要 阅读全文
posted @ 2020-02-02 22:35 ho966 阅读(183) 评论(0) 推荐(0)
摘要:无名管道只能在具有公共祖先的两个进程间使用,且建议半双工使用(因为历史上就是半双工,虽然有些系统支持全双工管道)。 无名管道通过pipe函数创建 #include <unistd.h> int pipe(int fd[2]); 其中:参数fd返回两个文件描述符,fd[0]只用来读,是输出,fd[1] 阅读全文
posted @ 2020-02-02 22:27 ho966 阅读(181) 评论(0) 推荐(0)