随笔分类 -  Linux

摘要:#include #include #include int main() { printf("clock ticks per second = %ld\n", sysconf(_SC_CLK_TCK)); return 0; } 阅读全文
posted @ 2019-01-16 18:27 Kjing 阅读(506) 评论(0) 推荐(0)
摘要:http://cenalulu.github.io/linux/all-about-cpu-cache/ 阅读全文
posted @ 2019-01-03 10:29 Kjing
摘要:编译: gdb attach上去 有3个线程 切到线程2(LWP 6006) 看下backtrace 从#2看出在child1处出现问题,查看代码 看出15行pthread_mutex_lock(&mutex_2),在等mutex_2,看下mutex_2的owner是谁 阅读全文
posted @ 2017-12-06 15:44 Kjing 阅读(2196) 评论(0) 推荐(0)
摘要:摘自《Go并发编程实战》 阅读全文
posted @ 2017-11-03 17:58 Kjing 阅读(120) 评论(0) 推荐(0)
摘要:摘自《Linux 环境编程:从应用到内核》 在 Linux 中,目前的线程实现是 Native POSIX Thread Library,简称 NPTL。在这种实现下,线程又被称为轻量级进程(Light Weighted Process),每一个用户态的线程,在内核中都有一个调度实体,也拥有自己的进 阅读全文
posted @ 2016-07-19 13:15 Kjing 阅读(2343) 评论(0) 推荐(0)
摘要:制作一个共享库 main.c 如果在 func 前面加上 在编译 main 时,报错: 如果在编译动态库时加上 -fvisibility=hidden,表示动态库的符号都是 hidden的 在函数前加上 __attribute__((visibility("default"))) 可以使函数对外可见 阅读全文
posted @ 2016-04-16 16:17 Kjing 阅读(986) 评论(0) 推荐(0)
摘要:GNU 编译器(GCC)提供了很多 C 语言扩展,编译器会使用该信息生成更高效的机器代码。 内联函数 避免内联 纯函数 返回值只受函数参数或 nonvolatile 全局变量影响。 常函数 常函数是一种严格的纯函数。常函数不能访问全局变量,参数不能是指针类型。因此,常函数的返回值只和值传递的参数值有 阅读全文
posted @ 2016-04-16 15:18 Kjing 阅读(1529) 评论(0) 推荐(0)
摘要:标准I/O实现了三种类型的用户缓冲,并为开发者提供了接口,可以控制缓冲区类型和大小。 无缓冲(Unbuffered) 不执行用户缓冲。数据直接提交给内核。因为这种无缓冲模式不支持用户缓冲(用户缓冲一般会带来很多好处),通常很少使用,只有一个例外:标准错误默认是采用无缓冲模式。 行缓冲(Line-bu 阅读全文
posted @ 2016-04-01 10:17 Kjing 阅读(555) 评论(0) 推荐(0)
摘要:Linux 的文件通常分为 7 大类 文件类型 缩写 英文名称 普通文件 - Regular file 目录文件 D Directory file 块设备文件 B Block special file 字符设备文件 C Character special file 命名管道文件 F FIFO 或 n 阅读全文
posted @ 2016-03-08 15:43 Kjing 阅读(1004) 评论(0) 推荐(0)
摘要:【摘自《Linux/Unix系统编程手册》】 从某种角度,可将信号视为进程间通信(IPC)的方式之一。然而,信号作为一种 IPC 机制却也饱受限制。首先,与其他 IPC 方法相比,对信号编程既繁且难,具体原因如下: 信号的异步本质就意味着需要面对各种问题,包括可重入性需求、竞争条件及在信号处理器中正 阅读全文
posted @ 2016-02-15 14:58 Kjing 阅读(218) 评论(0) 推荐(0)
摘要:【摘自《Linux/Unix系统编程手册》】 较之于标准信号,实时信号的优势如下: 实时信号的信号范围有所扩大,可应用于应用程序自定义的目的。而标准信号中可供应用随意使用的信号仅有两个:SIGUSR1 和 SIGUSR2。 对实时信号所采取的是队列化管理。如果将某一实时信号的多个实例发送给一进程,那 阅读全文
posted @ 2016-02-15 14:18 Kjing 阅读(2368) 评论(0) 推荐(0)
摘要:【摘自《Linux/Unix系统编程手册》】 核心转储文件 特定信号会引发进程创建一个核心转储文件并终止运行。所谓核心转储是内含进程终止时内存映像的一个文件。将该内存映像加载到调试器中,即可查明信号到达时程序代码和数据的状态。 从 Linux 版本 2.6 开始,可以根据 Linux 特有的 /pr 阅读全文
posted @ 2016-02-14 16:31 Kjing 阅读(394) 评论(0) 推荐(1)
摘要:【摘自《Linux/Unix系统编程手册》】 一般而言,将信号处理器函数设计的越简单越好。其中一个重要原因就在于,这将降低引发竞争条件的风险。下面是针对信号处理器函数的两种常见设计: 信号处理器函数设置全局性标志变量并退出。主程序对此标志进行周期性检查,一旦被置位随即采取相应动作。(主程序若因监控一 阅读全文
posted @ 2016-02-06 10:48 Kjing 阅读(1747) 评论(0) 推荐(1)
摘要:【摘自《Linux/Unix系统编程手册》】 信号集 sigemptyset() 函数初始化一个未包含任何成员的信号集。sigfillset() 函数则初始化一个信号集,使其包含所有信号(包括所有实时信号)。 #include <signal.h> int sigemptyset(sigset_t* 阅读全文
posted @ 2016-02-05 10:59 Kjing 阅读(1813) 评论(0) 推荐(0)
摘要:【摘自《Linux/Unix系统编程手册》】 每个信号都有一串与之相关的可打印说明。这些描述位于数组 sys_siglist 中。例如,可以用 sys_siglist[SIGPIPE] 来获取 SIGPIPE 信号(管道断开)的描述。然而,较之于直接饮用 sys_siglist 数组,还是推荐使用 阅读全文
posted @ 2016-02-04 13:50 Kjing 阅读(636) 评论(0) 推荐(0)
摘要:【摘自《Linux/Unix系统编程手册》】 kill() 一个进程能够使用 kill() 系统调用向另一个进程发送信号。(之所以选择 kill 作为术语,是因为早期UNIX实现中大多数信号的默认行为是终止进程) #include <signal.h> int kill(pid_t pid, int 阅读全文
posted @ 2016-02-04 10:53 Kjing 阅读(893) 评论(0) 推荐(0)
摘要:【摘自《Linux/Unix系统编程手册》】 Unix系统提供了两种方式来改变信号处置:signal() 和 sigaction()。 signal() 的行为在不同Unix实现间存在差异,这也意味着对可移植性有所追求的程序绝不能使用此调用来建立信号处理函数。故此,sigaction() 是建立信号 阅读全文
posted @ 2016-02-03 14:39 Kjing 阅读(3547) 评论(0) 推荐(1)
摘要:【摘自《Linux/Unix系统编程手册》】 概述 信号是事件发生时对进程的通知机制。有时也称之为软件中断。信号和硬件中断的类似之处在于打断了程序执行的正常流程,大多数情况下,无法预测信号到达的精确时间。 一个(具有合适权限的)进程能够向另一个进程发送信号。信号的这一用法可作为一种同步技术,甚至是进 阅读全文
posted @ 2016-02-03 11:39 Kjing 阅读(497) 评论(0) 推荐(0)
摘要:【摘自《Linux/Unix系统编程手册》】自内核2.6.13起,Linux开始提供inotify机制,以允许应用程序监控文件事件。使用inotify API有以下几个关键步骤:应用程序使用 inotify_init() 来创建一个inotify实例,该系统调用所返回的文件描述符用于在后续操作中指代... 阅读全文
posted @ 2016-01-20 13:48 Kjing 阅读(3025) 评论(0) 推荐(0)
摘要:【摘自Linux/Unix系统编程手册】函数的调用和返回使栈的增长和收缩呈线性。X86-32体系架构上的Linux(和大多数其它Linux和Unix的实现),栈驻留在内存的高端并向下增长(朝堆的方向)。专用寄存器--栈指针(stack pointer),用于跟踪当前栈顶。每次调用函数时,会在栈上新分... 阅读全文
posted @ 2015-12-28 13:41 Kjing 阅读(3043) 评论(0) 推荐(1)