Linux c
介绍linux下接口功能函数及应用
45°的阳光
虽然你变秃了,但是你变强了
展开
-
分支优化选择——likely()、unlikely()
分支优化选择对于条件选择语句,gcc内建了一条指令用于优化,在一个条件经常出现,或者该条件很少出现的时候,编译器可以根据这条指令对条件分支选择进行优化。内核把这条指令封装成了宏,比如likely()和unlikely()。使用示例:先存在如下条件选择语句:if(error){ .....}如果这个标记大多数为0,可以使用unlikely(error)if(unlikely(error)){ ......}如果,分支条件大多数为满足时,可以使用likely(success)if(l原创 2021-01-29 17:18:11 · 383 阅读 · 0 评论 -
const归纳
1.const定义的变量必须初始化1.const int a=10;//正确2.const int b;//错误 2.定义数组const int a[5]={1,2,3,4,5};//数组只读,不可以修改3.修饰指针1.int const *p; //指针p可以变,p指向的值是常量,不可以变2.int * const p; //指针指向的地址不可以变,值可以变4.修饰函数的参数void function1(const int i){ i++;//报错,i值改变}//函数中变量i原创 2020-10-09 20:51:31 · 105 阅读 · 0 评论 -
list_entry函数作用
一、函数原型#define list_entry(ptr, type, member) \((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))原创 2020-09-17 16:30:06 · 810 阅读 · 0 评论 -
offsetof获取结构体的偏移
一、函数原型#include <stddef.h>size_t offsetof(type, member);offsetof原型定义:define offsetof(t,m) ((size_t)&((t *)0)->m)1、关于&((t *)0)的解释1-1:(type *) 0作用是强制类型转换,将0转换为(type*)类型,一个type指针类型1-2:编译器在会将 &((t *)0) 优化为直接取地址,因为这种表达是: 先访问空间, 再取空间的原创 2020-09-17 14:06:50 · 358 阅读 · 0 评论 -
c语言实现一个线程池——附程序demon,可编译执行
备注:线程池学习时阅读的博客连接初学线程池,在网上找了大量的文章,阅读参考后,以开头链接为模板自己写了一个demon一、线程池介绍1.线程池的应用就是为了在需要大量线程创建、销毁时提高程序的执行效率而出现的2.线程池重要的一个知识就是对队列的引用,通过读取队列的数据去执行队列中的任务,通过队列的数量判断是否需要创建、销毁线程!c语言创建队demon二、线程池demon示例#include<stdio.h>#include<stdlib.h>#include<pt原创 2020-08-28 15:05:52 · 365 阅读 · 0 评论 -
判断线程是否存活——pthread_kill()函数
一、pthread_kill()函数介绍1.函数作用1>pthread_kill()函数的作用是向某个线程传递一个信号2>[注意]创建的线程中使用signal(SIGKILL,sig_handler)函数去处理对应的信号,如果你给一个线程发送了SIGQUIT,但线程却没有实现signal处理函数,则整个进程退出信号的设置:signal函数2.函数原型#include <pthread.h>#include<signal.h>int pthread_ki原创 2020-08-27 19:07:39 · 5795 阅读 · 0 评论 -
c语言时间相关函数
一、timeval结构体需要头文件#include<sys/time.h>man手册截图1.通过man手册可以看到timeval结构体包含了time_t和suseconds_t俩个结构体2.使用int gettimeofday(struct timeval *tv, struct timezone *tz);函数获取当前时间3.gettimeofday——demon#include<stdio.h>#include<sys/time.h>int m原创 2020-08-26 12:13:53 · 614 阅读 · 3 评论 -
Linux——动态库的编译
1.创建要编译成库的源码文件和头文件头文件:#ifndef _HELLO_H_#define _HELLO_H_#include<stdio.h>void display_hello();#endif源码:#include "hello.h" void display_hello(){ printf("hello world!");}编译生成动态库:gcc hello.c -fPIC -shared -o libhello.so–fPIC:原创 2020-08-24 15:10:20 · 219 阅读 · 0 评论 -
Linux下静态库的制作
一.静态库概念1.库是预编译的目标文件的集合,它们可以被链接进程序。静态库以后缀为”.a”的格式文件存在。2.标准系统库可在目录/usr/lib与/lib中找到3.2.静态库的优点:1>节约编译时间 2>可以不用提供源代码,对代码施行封装二、编译过程1.hello.cvoid display(){ printf("hello world!\n"); return;}2.hello.h#ifndef _HELLO_H_#ifdef _HELLO_H_ void原创 2020-08-20 17:24:08 · 330 阅读 · 0 评论 -
ASCII值与字符间的转换
ASCII表【图片摘自网上】demon1【打印hello的ASCII值】:#include<stdio.h>int main(){ char a[10]="hello\0"; printf("=h->%d |=e->%d |=l->%d |=l->%d |=o->%d\n",a[0],a[1],a[2],a[3],a[4]); return 0;}运行结果:demon2:字符转ASCII值#include<stdio.h原创 2020-08-12 19:14:27 · 1371 阅读 · 2 评论 -
信号的设置:signal函数
信号处理方式的主要方法有俩种:一种是使用简单的signal函数,另一种是sigaction函数一、signal函数使用signal()函数时,只需要指定信号类型和信号处理函数即可。头文件:#include <signal.h>函数原型:typedef void (*sighandler_t)(int);sighandler_t signal(int signum,sighandler_t handler);参数:signum:指定的信号代码 handler: SIG_.原创 2020-07-19 16:20:57 · 838 阅读 · 0 评论 -
S_ISDIR()函数讲解
所需头文件#include <sys/stat.h>S_ISDIR()函数的作用是判断一个路径是不是目录原创 2020-07-17 13:36:41 · 12847 阅读 · 0 评论