linux
文章平均质量分 70
小可爱amour
magic_coder_sun,一个可爱的小绿博主
展开
-
linux 系统调用sysconf
当前计算机都是多核的,linux2.6提供了进程绑定cpu功能,将进程指定到某个core上执行,方便管理进程。linux提供了sysconf系统调用可以获取系统的cpu个数和可用的cpu个数。sysconf 函数 man一下sysconf,解释这个函数用来获取系统执行的配置信息。例如页大小、最大页数、cpu个数、打开句柄的最大个数等等。详细说明可以参考man。#include <stdio.h>#include <unistd.h>#define ONE_.转载 2020-07-16 17:36:11 · 140 阅读 · 1 评论 -
shell脚本 重试 分文件 多进程
shell基础,shell多进程,fork: Cannot allocate memory,逻辑重试原创 2022-08-22 11:06:59 · 434 阅读 · 0 评论 -
nohup使用
执行语句:nohup sh myshell.sh>output.txt2>&1 &语义:后台执行shell文件(不受连接断开等影响),shell的输出和错误信息在文件output.txt中。分解: 蓝色:后台执行 绿色:执行shell 黄色:shell的输出文件重命名,没有的话默认文件是nohup.out 紫色:错误信息重定向在标准输出中。而不是2>output.txt,会导致文件outpu...原创 2021-10-13 14:48:29 · 109 阅读 · 0 评论 -
__attribute__ (( unused,__cleanup__)),FRR的互斥锁
今天看了下FRR中常见的一个锁实现,当然离开不了其中强大的宏frr_with_mutex。以一个示例慢慢揭开它的面纱吧。 frr_with_mutex(&m->mtx) { if (XXX) break; /* *对m的操作 */ AWAKEN(m); } 为了知道frr_with_mutex是什么,接下来是一层层扒开宏,接下来的宏可能比较枯燥,不愿细看推倒可以直接看后面宏结果/* mut...原创 2020-09-16 17:03:00 · 483 阅读 · 0 评论 -
Linux常见的进程调度和IO调度
前言 进程调度:在操作系统中调度是指一种资源分配。 调度算法是指: 根据系统的资源分配策略所规定的资源分配算法。 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源。这就是调度。目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源。1 常见的进程调度算法1.1先来先服务概念 早就绪的进程排在就绪队列的前面,迟就绪的进程排在就...原创 2020-09-10 18:47:49 · 1456 阅读 · 4 评论 -
Linux——pthread_create()
1 pthread_create pthread_create是(Unix、Linux、Mac OS X)等操作系统的创建线程的函数。它的功能是创建线程(实际上就是确定调用该线程函数的入口点),在线程创建以后,就开始运行相关的线程函数。 函数原型声明:#include <pthread.h>int pthread_create( pthread_t *restrict tidp, //指向新创建线程标识符的指针 const p...原创 2020-09-10 16:50:35 · 1583 阅读 · 0 评论 -
gdb的原理:ptrace系统调用
attach到一个指定的进程,使其成为当前进程跟踪的子进程,而子进程的行为等同于它进行了一次PTRACE_TRACEME操作。但是,需要注意的是,虽然当前进程成为被跟踪进程的父进程,但是子进程使用getppid()的到的仍将是其原始父进程的pid。 当你在gdb中使用attach命令来跟踪一个指定进程/线程的时候,gdb就自动成为改进程的父进程,而被跟踪的进程则使用了一次PTRACE_TRACEME,gdb也就顺理成章的接管了这个进程。 gdb调试的实现都是建立...原创 2020-09-08 19:58:52 · 724 阅读 · 0 评论 -
Linux内核剖析系列
1:Linux系统调用详解(实现机制分析)--linux内核剖析(六)2:Linux进程间通信的几种方式总结--linux内核剖析(七)3:进程间通信之-管道--linux内核剖析(八)4:进程间通信之-信号signal--linux内核剖析(九)5:进程间通信之-信号量semaphore--linux内核剖析(十)6:进程间通信之-共享内存Shared Memory--linux内核剖析(十一)...原创 2020-09-08 17:11:10 · 86 阅读 · 0 评论 -
select、poll、epoll之间的区别
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读/写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。 epoll跟select都能提供多路I/O复用的解决方案。在现在的Li...转载 2020-09-03 17:11:12 · 205 阅读 · 1 评论 -
AF_INET域与AF_UNIX域socket通信原理
AF_INET用作非本机通信 AF_INET域socket通信过程是典型的TCP/IP四层模型的通信过程,如下: 发送方、接收方依赖IP:Port来标识,即将本地的socket绑定到对应的IP端口上,发送数据时,指定对方的IP端口,经过Internet,可以根据此IP端口最终找到接收方;接收数据时,可以从数据包中获取到发送方的IP端口。 发送方通过系统调用send()将原始数据发送到操作系统内核缓冲区中。内核缓冲区从上到下依次经过TCP层、IP层、链...转载 2020-09-03 11:36:05 · 548 阅读 · 1 评论 -
__attribute__((section()))构建初始化函数表
作用: 使用__attribute__((section()))构建初始化函数表后,由模块告知main:“我要初始化“,添加新模块再也不需要在main代码中显式调用模块初始化接口。以此实现main与模块之间的隔离,main不再关心有什么模块,模块的删减也不需要修改main。原理: 1.模块通过__attribute__((section("name")))的实现,在编译时把初始化的接口放到name数据段中。 2.main在执行初始化时并不需要知...转载 2020-09-01 20:46:24 · 869 阅读 · 0 评论 -
Linux进程间通信类型 含示例
1:Linux进程间通信类型2: 管道(pipe)和有名管道(FIFO)。3: 信号(signal),见signal函数、sigaction函数及信号集操作函数和信号的发送和捕捉函数(alarm、kill、raise、pause、 sleep、abort)。4: 共享内存,见共享内存函数(shmget、shmat、shmdt、shmctl)及其范例。5: 消息队列,见消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例。6: 信号量,见信号量函数(s...原创 2020-08-19 15:00:34 · 209 阅读 · 1 评论 -
fork()
在linux中fork()函数详解中的第一个程序,修改了下,具体如下:#include <unistd.h>#include <stdio.h>int main (){ pid_t fpid; //fpid表示fork函数返回的值 int count=0; printf("========================\n"); fpid=fork(); printf("------------------------\n"); i原创 2020-08-19 14:24:41 · 225 阅读 · 0 评论 -
关于malloc和mmap的相关细节
预备知识1:size_t 类型 为了增强程序的可移植性,有了size_t,不同系统上,定义size_t不一样。 经测试发现,32位系统中size_t是4字节,64位系统中,size_t是8字节,这样利用该类型可以增加程序移植性。 size_t一般用来表示一种计数,比如有多少东西被拷贝等。例如:sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小。 它的意义大致是“适于计量内存中可容纳的数据项目个数的无符号整数类型”。所以,它在数组下标和...原创 2020-08-14 19:07:47 · 1349 阅读 · 1 评论 -
__builtin_return_address(LEVEL)函数解释和运行实战
gcc默认不支持__builtin_return_address(LEVEL)的参数为非0。好像只支持参数为0。1、__builtin_return_address(0)的含义是,得到当前函数返回地址,即此函数被别的函数调用,然后此函数执行完毕后,返回,所谓返回地址就是那时候的地址。2、__builtin_return_address(1)的含义是,得到当前函数的调用者的返回地址。注意是调用者的返回地址,而不是函数起始地址。3、实战#include <stdio.h>...转载 2020-08-14 16:31:35 · 1363 阅读 · 0 评论 -
性能分析工具gprof
1:性能分析工具gprof介绍2:程序分析工具gprof介绍3:GPROF(性能监视工具)使用详解4:程序分析工具gprof介绍原创 2020-08-06 16:26:34 · 120 阅读 · 0 评论 -
TIPC协议和实现解析
1TIPC简介 TIPC是爱立信公司提出的透明进程间通信协议,主要用于高可用(HA)和集群系统中。它允许设计人员能够创建可以和其它应用快速可靠地通信应用,无须考虑在其它需要通信的应用在集群环境中的位置。 在可信网络环境下,TCP/IP协议的很多操作是冗余的,例如三次握手,增加了应用程序的通信时间,不利于对时间响应要求比较高的应用,比如处理集群成员节点由于重启,down机等各种原因导致的增加和减少。 TIPC针对可信网络环境,减少了建立通信连接的步骤和寻址目标地址的操作...原创 2020-07-30 17:09:19 · 4112 阅读 · 0 评论 -
sleep(0)与sched_yield()
结论: 如果你是为了耗掉一个机器周期,那直接asm("nop"), 如果是为了让权,建议把 所有使用usleep(0)换成sched_yield();sched_yield() 的man手册:SYNOPSIS #include <sched.h> int sched_yield(void);DESCRIPTION sched_yield() causes the calling t...原创 2020-07-30 11:15:07 · 430 阅读 · 0 评论 -
((void *) - 1),(void*)0,NULL
1:((void *) - 1)对于32位机器来说,((void *)-1)是把-1转换成指针0xFFFFFFFF,即INVALIDATE。64位同理,转换为全F的地址。2:(void*)0判断指针是否为空指针,即NULL。原创 2020-07-17 21:24:36 · 701 阅读 · 0 评论 -
memory_order等6种
C++ 并行编程: 设定 指令执行顺序typedef enum memory_order { memory_order_relaxed, // 不对执行顺序做保证 memory_order_acquire, // 本线程中,所有后续的读操作必须在本条原子操作完成后执行 memory_order_release, // 本线程中,所有之前的写操作完成后才能执行本条原子操作 memory_order_acq_rel, // 同时包含 memory_.原创 2020-07-16 20:50:20 · 218 阅读 · 0 评论 -
__sync_*系列原子操作函数
gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。其声明如下:type __sync_fetch_and_add (type *ptr, type value, ...)type __sync_fetch_and_sub (type *ptr, type value, ...)type __sync_fetch_and_or (type *ptr, type value, ...)type __sync_fetch_and_and (...转载 2020-07-16 20:46:16 · 1419 阅读 · 0 评论 -
offsetof
#define offsetof(s, m) (size_t)&(((s *)0)->m)s是一个结构名,它有一个名为m的成员(s和m 是宏offsetof的形参,它实际是返回结构s的成员m的偏移地址.(s *)0 是骗编译器说有一个指向类(或结构)s的指针,其地址值0&((s *)0)->m是要取得类s中成员变量m的地址. 因基址为0,这时m的地址当然就是m在s中的偏移最后转换size_t 型,即unsigned int。...原创 2020-07-16 18:01:49 · 80 阅读 · 1 评论 -
__attribute__((constructor))和__attribute__((destructor))
总结:1:__attribute__((constructor)) 先于main()函数调用,__attribute__((destructor)) 在main()函数后调用2:只有constructor有优先级,指定优先级时,先执行优先级小的,再执行优先级大的,最后执行没有指定优先级。0-100是保留优先级。#include <stdio.h>#include <stdlib.h> static void before(void) __attribute_原创 2020-07-16 15:10:15 · 456 阅读 · 0 评论