linux系统编程
文章平均质量分 88
一 铭
公众号:大数据架构师修行之路
展开
-
无锁编程算法简介(An introduction to lockless algorithms)
你可知道…?LWN.net 是订阅者支持的出版物;我们依靠订户来保持整个操作的进行。请通过购买订阅并保持 LWN 在线来提供帮助。当传统的锁定原语无法使用或性能不够好时,Linux 内核会对无锁算法感兴趣。出于这个原因,他们时不时地出现在 LWN 上;促使我撰写本系列文章的最后一次提及是在去年 7 月。出现得更频繁的主题是读取-复制-更新(RCU——这些 2007 年的文章仍然高度相关)、引用计数,以及将无锁基元包装到更高级别、更容易理解的 API 中的方法。翻译 2023-04-27 22:24:40 · 406 阅读 · 0 评论 -
/proc/[pid]/stat 文件解释
[root@localhost ~]# cat /proc/6873/stat6873 (a.out) R 6723 68736723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 140902456 4294967295 134512640 134513720 3215579040 0 2097798 0 0 0转载 2009-07-17 11:35:00 · 7390 阅读 · 0 评论 -
gcc 问答
* 如何查看一个程序使用gcc什么版本编译的?objdump -sj .comment a.out *原创 2009-05-15 10:37:00 · 1470 阅读 · 0 评论 -
linux 嵌入式程序设计
[推荐] 嵌入式开发资料集锦 嵌入式开发网站集锦!国内站点:电子设计信息网,尽管是个业界新秀,但潜力无量!这里能带给你无限精彩和希望!http://www.edires.net/华恒公司的主页,里面有很多的相关资料,有待大家去发现http://www.hhcn.com/chinese/embedlinux-res.htmlSkyEye嵌转载 2010-03-01 12:24:00 · 6422 阅读 · 0 评论 -
gdb 使用FAQ
=常用操作=*如何查看一个函数的定义(gdb) list(l) functionname*如何进入和跳出函数?gdb> b(break) n #fun()所在的行gdb> s(step) #进入函数gdb> finish 或 return #跳出函数*如何打印一个结构或数组的值?**打印结构的值gdb>print(原创 2012-04-11 20:47:53 · 1804 阅读 · 0 评论 -
如何获取MAC地址
如何获取MAC地址 /* get the hardware address of the interface */ int sockfd; struct ifreq req; unsigned char hwaddr[ETH_ALEN]; if ((sockfd = socket(AF_I转载 2009-03-02 18:04:00 · 1259 阅读 · 0 评论 -
理解dup和dup2
看到ChinaUnix(CU)上的一个帖子后,觉得自己对dup和dup2特别是后者的理解还是有欠缺的,这两个接口看起来很简单,但是理解起来也真的并不是那么容易。相信大部分在Unix/Linux下编程的程序员手头上都有《Unix环境高级编程》(APUE)这本超级经典巨著。作者在该书中讲解dup/dup2之前曾经讲过“文件共享”,这对理解dup/dup2还是很有帮助的。这里做简单摘录以备在后面的分转载 2006-07-30 13:27:00 · 1925 阅读 · 0 评论 -
mac book上安装和使用gdb
概述本文讲述如何在mac book中安装和调试gdb。由于自己在mac book上安装gdb的过程中遇到的一些问题,通过本文把这些问题总结一下,并提供解决之道。安装版本问题uname -a输出如下:17.7.0 Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT 2018; root:xnu-4570.71....原创 2018-09-06 09:14:57 · 2449 阅读 · 0 评论 -
如何调试segment fault错误
概述本文讲述如何调试c运行时出现的segment fault错误。本文首先对segment fault错误的原因进行一些分析,然后介绍了一种调试该错误的方法。原因分析造成segment fault,产生core dump的可能原因可能有以下几种内存访问越界(1)由于使用错误的下标,导致数组访问越界(2)搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结...原创 2019-04-04 10:25:19 · 9788 阅读 · 1 评论 -
使用jemalloc来对c,c++程序进行内存管理
概述本文讲述如何在c/c++程序中使用je_malloc内存管理模块来提升c/c++程序的性能。引言在编写c/c++服务器代码时,服务器的性能不仅决定于多线程/进程池模型的使用,还有很大程度上在于如何使用和管理内存。目前比较流行的c/c++代码来看,nginx,memcached,mysql等都有自己的内存管理模块,而redis使用的是第三方的内存管理模块je_malloc或tc_mall...原创 2019-04-05 22:46:47 · 7557 阅读 · 3 评论 -
linux开发 常见问题解答索引 (自BBS)
*请问在LINUX下怎样实现非常精确的定时器,时间计算? http://www.newsmth.net/bbstcon.php?board=LinuxDev&gid=846* 如何去掉apache中对文件名大小写敏感? http://www.newsmth.net/bbstcon.php?board=LinuxDev&gid=882* linux/unix c/c++ 书籍精品列表 http:原创 2009-03-04 09:22:00 · 1102 阅读 · 0 评论 -
u/linux 系统编程问答
*如何统计一个进程进行的系统调用? (转自水木)1) gcc中有关于profile的选项,一般好像用-pg2)strace -c 产生类似下面的统计信息strace -c -p 14653 (Ctrl-C) * 必须学会的gcc 选项The common syntax is gcc [option] [filename]. All options listed below原创 2009-03-06 10:13:00 · 1215 阅读 · 0 评论 -
signal 和 sigaction 函数
关于signal 函数和 sigaction 函数的区别注意 : sigaction *一般用法: 19 20 phan.sa_handler = &sig_handler; 21 sigemptyset(&phan.sa_mask); 23 phan.sa_flags = 0; 或 //phan.sa_fl原创 2008-07-29 14:46:00 · 4542 阅读 · 2 评论 -
linux 守护进程编写
linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。 同原创 2008-06-16 15:13:00 · 49466 阅读 · 6 评论 -
APUE读书笔记
第3章 文件I/O * ssize_t read(int fd, void *buf, size_t count); 函数在从文件描述符中读时,很多原因导致读不到count个字符,所以在进行读取操作时需要处理一下,特别是在进行网络和管道读取的时候。 一般的处理方式是 while((rt = read(fd, buffer, size) == -1) && (errno == E原创 2009-02-06 13:46:00 · 1219 阅读 · 0 评论 -
APUE读书笔记--进程基础
第8章 进程控制*进程标识每个进程由一个正整数唯一标识,若该进程终止,它的进程标识整数可以被其他进程使用。L/Unix系统中 0进程表示swapper进程,它不执行磁盘上的代码,所以被称为系统进程。进程1,也就是init进程负责在自举后启动一个UNIX系统,通常配合/etc/rc*等文件启动系统。 *关于fork .fork是创建一个新进程的唯一方式,它调用一次,返回两次。然后两者原创 2009-02-10 12:50:00 · 1032 阅读 · 0 评论 -
APUE读书笔记-高级I/O
高级I/O1,非阻塞I/O 有些调用可能会使进程永远阻塞,它们可能包括: .读管道,终端设备或网络设备的数据并不存在时,读操作会使调用者永远阻塞。 .数据不能立即被写到上述同类型文件接受,该写操作也会阻塞。 .在某条件发生之前,打开某种类型的文件,也会被阻塞,例如:打开用写模式打开FIFO,该FIFO没有任何其>他进程用读模式打开时,也会阻塞。 .对已经原创 2009-02-16 11:02:00 · 1524 阅读 · 1 评论 -
APUE读书笔记-I/O多路转接
高级I/O1, I/O多路转接select 函数 /* According to POSIX.1-2001 */ #include /* According to earlier standards */ #include #include #include int select(int nfds, fd_原创 2009-02-16 16:26:00 · 1629 阅读 · 0 评论 -
unpv2-共享内存
1,共享内存*要点.共享内存允许两个或多个进程共享一段给定的内存区域。因为她不需要进行系统调用,所以是进程间通信最快的方式。.多个进程在访问共享内存时需要某种形式的同步,最常用的是信号量,记录锁,互斥锁。.通过fork生成的子进程不会和父进程共享内存区,而是把内存区复制一份。*mmap()函数把一个文件或者一个posix共享内存区对象映射到调度进程的地址空间。使...原创 2009-02-16 16:29:00 · 906 阅读 · 0 评论 -
APUE读书笔记-进程通信
进程通信1, 管道(pipe) 在理解管道时需要注意的地方: .管道是半双工的,不能假设它是全双工的。 .它只能用在有公共祖先的进程之间。比如shell几个命令之间用管道连接,但父进程都是终端进程。 1.1 管道的创建 #include int pipe(int filedes[2]);DESCRIPTION pipe() creates a pai原创 2009-02-16 10:59:00 · 1025 阅读 · 0 评论 -
同步
同 步 在进行多线程和多进程编程的时候,总会遇到多个进程或多个线程对同一块数据的访问。这是我们就需要使用某种同步的手段来保证数据的正确访问。 1 互斥锁和条件变量 使用范围:同一进程中的不同线程间;1.1 互斥锁 *基本概念 互斥锁是指相互排斥,是最基本的同步形式。它可以用来保护临界区,以保证任何时候都只有多个线程中的一个线程在期间运行。原创 2009-02-23 18:02:00 · 1062 阅读 · 0 评论 -
daemon编程 重定向输出和出错流
/* * 如何重定向一个进程的stderr,stdin,stdout到一个文件 * 如果文件不存在,则默认重定向到/dev/null * *//* * 把输入重定向到/dev/null * 把标准出错重定向到 指定文件中 * 因为我们不能确定是否stderr和stdout都正在使用系统默认 * 的文件描述符,所以最好使用函数fileno(stderr)来对流进行转换。 */#define FAIL原创 2008-07-15 14:35:00 · 1706 阅读 · 0 评论