Linux C
文章平均质量分 77
码农小明
openHarmony多媒体领域开发者。
展开
-
cmake CMakeLists.txt 常用模板
三年前整理过Makefile常用模板 ,一直写手写Makefile,近来不得不用到cmake,实践了一下感觉真香!功能强大!还是那句话 自己总结方便查阅,要是能帮到别人那是极好的~cmake命令依赖CMakeList.txt文件,解析成makefile文件,然后make编译。先按顺序介绍其最简的常用语法,详细语法查阅cmake官网,最后整理完整版示例。常见语法介绍cmake版本必选项。放在第一行,指定cmake最低版本。cmake_minimum_required(VERSION 3.5.1.原创 2021-11-02 18:07:15 · 3847 阅读 · 4 评论 -
Linux C 语言日期时间函数总结
C 语言获取系统时间相关函数总结记录一下,用的时候不至于再去到处找了。函数精度说明time()秒获取系统时间ftime()秒 + 毫秒获取系统时间 1/10^3gettimeofday()秒 + 微秒获取系统时间 1/10^6clock_gettime()秒 + 纳秒获取系统时间 1/10^9sleep()秒延时函数usleep()微秒延时函数 1/10^6struct tm-存储年月日时分秒的结构loc.原创 2021-09-05 17:20:32 · 1506 阅读 · 0 评论 -
C++ 线程池
总结一下C++里面的线程池,用的时候直接Copy就可以了。为什么要用线程池呢?打个比方:不用线程池的话 每次有活,老板就要招一个人去干,干完活就把工人辞了。如果用线程池的话就是,老板招几个人干活,把任务按需分配给这几个人,活少的时候可能这几个人会闲着,但是活多的时候可以让这几个人排队一直干活。这种场景主要考虑如果活都比较小,后者可以省去频繁招聘员工带来的成本,忽略员工没活的时候成本消耗。就是说频繁的新建线程比较耗资源,如果同时新建线程比较多超过了一定的数量也会占用比较多的处理器资源,而线程空跑的时候资.原创 2021-04-10 17:16:18 · 2318 阅读 · 0 评论 -
Linux C/C++ 中锁的使用总结
本文总结C和C++中各种锁以及使用方式,主要是C语言中的互斥锁 mutex 和读写锁 rwlock,以及C++中的互斥锁mutex以互斥锁管理。C++中的各种mutex其实是对C语言中的mutex的面相对象的封装,此外的mutex管理部分的类其实是用RAII的风格对mutex对象进行进一步包装。此外线程间通信还有信号量,因为它不叫锁就不说了,还有个非常不常用的自旋锁也不说了,还有名字很罕见的闩 latch 与屏障 barrier 也不说了。感兴趣自己看 cppreference.com吧。1. C .原创 2020-07-27 21:09:35 · 7940 阅读 · 2 评论 -
Linux I/O 多路复用之select、poll、epoll详解与代码示例
如果写过最基础的TCP服务,那就应该清楚 accept 和 recv 函数是阻塞式的(默认),也就是说程序就卡在这个地方等待,直到有连接或者数据来到。如果不用多线程的话,一旦有数据到来就会一直处理这个连接的数据,而没法接收新的连接。其实操作系统可以在一个线程里轮询式处理这些事务,也就是常说的I/O多路复用。select,poll,epoll 都是I/O多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。s原创 2020-06-27 22:36:47 · 2309 阅读 · 2 评论 -
C语言调用so动态库的两种方式
方式1:类似静态库的调用(使用头文件)这种方式生成的程序会在启动时候就加载so动态库。 add.hint add(int x, int y);add.c#include "add.h"int add(int x, int y) { return (x + y);}main.c#include <stdio.h>#include "...原创 2018-07-23 00:27:02 · 48469 阅读 · 6 评论 -
Unix I/O复用:select函数与poll函数详解与示例
先从一个简单的场景来理解什么叫I/O复用。学习过UNIX TCP网络编程的同学肯定知道accept和recv是阻塞的函数,accept函数是等待客户端连接,接受连接后返回,继续执行recv函数等待读取客户端发送过来的请求。但是如果一直没有客户端连接程序就会卡在accept函数上,连接后如果客户端没有数据发送就会卡在recv函数上,没法做别的事情。在处理一个客户端连接的时候也没法监听新的连接。也就是...原创 2018-07-22 02:10:38 · 488 阅读 · 0 评论 -
C调用C++库和C++调用C库的方法
C++调用C的静态库/动态库C++调用C的函数比较简单,直接使用extern "C" {}告诉编译器用C的规则去调用C函数就可以了。CAdd.hint cadd(int x, int y);CAdd.c#include "CAdd.h"#include <stdio.h>int cadd(int x, int y) { printf("原创 2018-07-23 23:39:49 · 70059 阅读 · 29 评论 -
UDP Socket示例程序
通常我们涉及到的网络编程,也称为Socket编程,多数是TCP和UDP协议的编程,二者最大的区别就是:1. TCP是可靠的传输,需要三次握手建立连接再传数据,而UDP是无连接的,即使没有接收方,也可以一个劲往一个地址发数据,所以说是不可靠的传输模式。 2. TCP是基于流模式的,UDP是基于数据报模式的。因为UDP比TCP稍微简单一些,先介绍UDP编程模式。 从编程的角度来说,UDP Sock原创 2016-11-25 22:52:21 · 1128 阅读 · 0 评论 -
UDP Socket示例程序:使用fgets函数获取屏幕输入
前一篇文章的UDP Socket示例程序的Client是循环发送固定的一句话,有时候我们希望像聊天软件一样可以自己输入数据。读取屏幕字符串可以使用gets函数和fgets函数,然而因为安全方面的因素,推荐使用后者。 char *fgets(char *buf, int bufsize, FILE *stream);buf: 字符型指针,指向用来存储所得数据的地址bufsize: 整型数据,指原创 2016-11-27 14:28:48 · 747 阅读 · 0 评论