
linux编程
王log
懒得写描述
展开
-
新版本glib使用epoll代替poll
新版本的glib支持使用外部的事件循环代替内部的poll,这篇文章使用的glib版本是V2.70.0, 理解还很粗浅,但是demo能跑起来,还需要再详细研究一下参考的两个链接,多线程下使用及效率是怎样的都还不清楚。1、新API通过新的API g_main_context_new_with_flags 及新变量G_MAIN_CONTEXT_FLAGS_OWNERLESS_POLLING可以创建一个无主的poll,然后通过glib的一套API可以实现自己的事件循环。ubuntu18下的demo:#incl原创 2021-12-10 21:23:23 · 1318 阅读 · 3 评论 -
libcurl post带参数请求
1、参数特殊字符转换 curl_easy_escape函数及curl_escape函数都可以将参数中的所有不符合URL规定的字符转化为其对应的%XX 形式。 curl_escape函数是旧的API,其内部调用的是curl_easy_escape函数只不过handle设置为NULL了。两个函数调用返回的字符串都要调用curl_free或free函数释放。2、设置post参数 使用CURLOPT_POSTFIELDS添加post参数 CURL *curl; CURLcode res;原创 2020-07-22 16:38:49 · 3685 阅读 · 0 评论 -
linux exec函数执行之前设置当前进程所有描述符FD_CLOEXEC
1、查看进程打开的描述符ll /proc/$PID/fd2、C语言获取当前进程打开的fd并设置FD_CLOEXEC#include <stdio.h>#include <errno.h>#include <unistd.h>#include <string.h>#include <dirent.h>#include<stdint.h>/* 将当前进程打开的所有描述符标志设置为CLOEXEC */static原创 2020-06-23 19:18:50 · 585 阅读 · 0 评论 -
linux mount函数nfs挂载
1、使用linux的mout函数挂载#include <stdio.h>#include <sys/mount.h>#include <errno.h>#include <unistd.h>#include <sys/stat.h>#include <sys/types.h>#include <string.h>#include <sys/stat.h>#include <string.h原创 2020-06-10 18:53:24 · 1320 阅读 · 4 评论 -
cmake编译本目录所有文件
目录结构如下:示例如下:cmake_minimum_required(VERSION 2.8)project(FILTER_SERVER)#设置编译器set(CMAKE_C_COMPILER g++)#添加编译选项add_definitions(-g -fpermissive -std=c++0x)#添加宏定义add_definitions(-DWITH_OPENSSL -D...原创 2020-03-06 15:18:49 · 6577 阅读 · 0 评论 -
linux下 单调时间(另附墙上时间、CPU时间)
1、单调时间 linux下编写应用程序时,涉及到时间获取有多个函数可以选择,这些常用获取时间函数之间的差异:《1》、 time该函数返回自1970来的秒数,精度过低;《2》、gettimeofday 该函数返回自1970年以来的秒数和微秒数,精度足够,符合一般场景的使用期望。但是如果系统时间因为ntp等原因发生时间调变,那么用这个函数来计算相对时间就很可能会出问题,此种情况下就不...原创 2018-12-02 10:31:00 · 3093 阅读 · 0 评论 -
linux 下文件同步函数(fflush、sync、fsync、fdatasync)之间差异
遇到机器异常关机时,写log文件信息丢失问题,所以记录下。 Linux实现中在内核设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲区进行。当我们向文件写数据时,内核通常先将数据复制到一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待写满或者内核需要重用该缓冲区以便存放其他数据时,才会将该缓冲区排入输出队列,然后等它到达队首时,才进行实际的I/O操作。这就是被称为 ...原创 2018-12-02 11:29:29 · 7982 阅读 · 0 评论