Linux 系统编程
文章平均质量分 68
codetracer
学习造轮子
展开
-
傻瓜版 配置samba
<br />1. 安装<br />$ sudo apt-get install samba<br />$ sudo apt-get install samba-common<br />$ sudo apt-get install samba-common-bin<br />$ sudo apt-get install system-config-samba<br />2. 配置<br />$ sudo system-config-samba<br />3. 启动<br />$ sudo smbd start原创 2010-12-12 15:32:00 · 679 阅读 · 0 评论 -
pthread---一次性初始化&&线程私有数据
一次性初始化 有时候我们需要对一些posix变量只进行一次初始化,如线程键(我下面会讲到)。如果我们进行多次初始化程序就会出现错误。 在传统的顺序编程中,一次性初始化经常通过使用布尔变量来管理。控制变量被静态初始化为0,而任何依赖于初始化的代码都能测试该变量。如果变量值仍然为0,则它能实行初始化,然后将变量置为1。以后检查的代码将跳过初始化。 但是在多线程程序设计中,原创 2012-06-03 14:11:10 · 9098 阅读 · 2 评论 -
Linux core 文件
1. core文件的简单介绍在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。 2. 开启或关闭core文件的生成用以下命令来阻止系统生成core文件:ulimit -c 0下面的命令可以检查生成core文件的选项是否打开:ulimit -a该命令将显示所有的用户定制,其中选项-a代表“al转载 2012-06-03 00:58:40 · 661 阅读 · 0 评论 -
Linux 并发编程小结
一、可重入函数:可重入函数遵循以下三个特点。1.函数中不能使用任何非const的静态或者全局变量。这个比较好理解,共享的变量要保证是无法被修改的,大家都只作读取操作,自然没有竞争的问题。2.不能产生任何“副作用”, 即不能对所处的环境产生影响。修改磁盘上的共享文件,依赖于环境变量.....总之,这个函数是完全孤立的,不会改变任何运行环境中的因素,这也包括使用定义在局部的stat转载 2012-07-09 23:46:00 · 5992 阅读 · 0 评论 -
频繁分配释放内存导致的性能问题的分析
现象1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C program命令查看,发现majflt每秒增量为0,而minflt每秒增量大于10000。初步分析majflt代表major fault,中文名叫大错误,minflt代表minor fa转载 2012-07-03 06:43:40 · 1381 阅读 · 0 评论 -
linux 信号学习总结
一、可靠性与不可靠性: 1. 不可靠信号 主要由以下两个问题导致不可靠问题的发生: a. 进程每次处理信号后, 就会对信号的响应设置为默认动作;如果用户不希望这样操作,就要在信号处理函数结尾再调用一次signal,进行重装。 b. 信号会丢失。 Linux支持不可靠信号,信号值小于SIGRTMIN的都是不可靠的, 但原创 2012-08-05 10:46:34 · 1156 阅读 · 0 评论 -
Linux 进程状态详解(转)
Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。Linux进程状态:R (TASK_RUNNING),可执行状态。只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列转载 2012-08-06 23:21:26 · 1190 阅读 · 0 评论 -
一个奇怪的不可中断进程
写了个简单的驱动,以及应用层的读写程序。优先卸载了驱动,然后...应用程序卡在那里了,任凭你怎么kill,怎么重新装载驱动,都没有反应。。。/** * @file global_var.c * @author wzj * @brief competation * @version 1.1 * @note * @date: 2012年08月02日星期四23:39:28 *原创 2012-08-06 23:31:53 · 1619 阅读 · 0 评论 -
linux下/proc/stat 计算CPU利用率
一般来说对于需要大量cpu计算的进程,当前端压力越大时,CPU利用率越高。但对于I/O网络密集型的进程,即使请求很多,服务器的CPU也不一定很到,这时的服务瓶颈一般是在磁盘的I/O上。比较长见的就是,大文件频繁读写的cpu开销远小于小文件频繁读写的开销。因为在I/O吞吐量一定时,小文件的读写更加频繁,需要更多的cpu来处理I/O的中断。在Linux/Unix下,CPU利用率分为用户态,系统转载 2012-07-25 17:23:17 · 1194 阅读 · 0 评论 -
使用struct ifreq实现ifconfig
ifconfig是我们查看/设定网口状态常用的命令,其实这个命令就是对一些系统函数的封装,通过对struct ifreq的修改,我们可以很轻易地设定网口状态,获取网口状态。这个结构体位于头文件中,打开去看看吧,对照着英文注释,很容易找到自己想要的东西。而网卡相关的一些ioctl操作, 也就是用于查询/修改状态的标记位,都在中,很清晰的,找份源码看看吧。下面是一个小示例,演示了获取信息的过程,如原创 2012-08-12 00:09:27 · 13283 阅读 · 0 评论 -
malloc背后的故事
本文主要分析内存以及I/O相关的系统调用和库函数的实现原理,根据原理给出在使用过程中需要注意的问题和优化的侧重点,本文涉及到的系统调用包括readahead,pread/pwrite,read/write,mmap,readv/writev,sendfile,fsync/fdatasync/msync,shmget,malloc。 本文先简单介绍应用程序对内存的使用以及I/O系统对转载 2012-08-28 07:02:15 · 3137 阅读 · 0 评论 -
进程之间<1>
调用fork之后, 生成的子进程继承了父亲的之前定义的句柄、局部变量、环境变量。也就是进程空间中,所有当前的数据。之后大家分道扬镳,各自为政。以下示例,展示了一种共享输出流造成的竞态。/* * @FileName: race.c * @Author: wzj * @Brief: * 1.1.演示一种简单的进程间竞态, * * * * * @Histo原创 2012-06-03 10:16:04 · 650 阅读 · 0 评论 -
cpu绑定和cpu亲和性
将进程/线程与cpu绑定,最直观的好处就是提高了cpu cache的命中率,从而减少内存访问损耗,提高程序的速度。我觉得在NUMA架构下,这个操作对系统运行速度的提升有较大的意义,而在SMP架构下,这个提升可能就比较小。这主要是因为两者对于cache、总线这些资源的分配使用方式不同造成的,NUMA每个cpu有自己的一套资源体系, SMP中每个核心还是需要共享这些资源的,从这个角度来看,NUMA使用原创 2012-04-21 15:57:38 · 28897 阅读 · 4 评论 -
Linux 2.6中在应用层获取线性时间
在应用层设置的一些计时器,往往在系统时间被修改之后就失效了,gettimeofday()就是这样一个让人又爱又恨的函数。如何在应用层获取一个不受系统时间影响的时间?linux2.6中提供了clock_gettime()函数,使用这个函数可以获得一个类似于jiffies的计数值,也可以获得当前的系统时间:#include #include #include #include int原创 2012-05-03 12:49:06 · 1421 阅读 · 0 评论 -
Po文件 和 Mo文件
<br /><br />po文件是GNU gettext项目的一套应用规范,属于L10n方案。<br /> <br />PO 是 Portable Object (可移植对象)的缩写形式;MO 是 Machine Object (机器对象) 的缩写形式。<br /> <br />PO 文件是面向翻译人员的、提取于源代码的一种资源文件。当软件升级的时候,通过使用 gettext 软件包处理 PO 文件,可以在一定程度上使翻译成果得以继承,减轻翻译人员的负担。<br /> <br />MO 文件是面向计算机的、转载 2011-04-04 18:44:00 · 12621 阅读 · 1 评论 -
Linux 重装mysql
mysql总是报错,说sock文件不存在,网上若干方法,更改权限,更改配置文件,结果还是不能正常生成.sock文件。没办法,删除,重新安装。 完全删除:删除 mysqlsudo apt-get autoremove --purge mysql-server-5.0sudo apt-get remove mysql-serversudo apt-get autoremove mysql-原创 2011-06-13 09:37:00 · 5669 阅读 · 1 评论 -
scp 命令
以前一直是在服务器上tar打包压缩,下载到本地电脑上,再上传到另外一台服务器上,再解压。其实使用scp就可以直接对拷文件或者文件夹了。scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证.与rcp不原创 2011-07-12 17:32:18 · 674 阅读 · 0 评论 -
Linux 下的时间函数
做数据库读写操作,文件操作,数据传输,经常需要手动打时间标记,获取时间的函数自然要了然于心。time_t 这个类型就是用来存储1970年到现在经过了多少秒,需要更精确一些,可以用timeval,它精确到微秒。struct timeval{ long tv_sec原创 2011-09-18 23:23:07 · 806 阅读 · 0 评论 -
Linux进程的计时器和间隔计时器
比较常用的时间控制函数就是sleep();让我们当前的进程休眠指定的秒数。系统中的每个进程都有一个私有的闹钟。这个闹钟很像一个计时器,可以设置在一定秒数后的闹钟。 时间一到,时钟就发送一个信号SIGALRM到进程。除非为SIGALRM设置了处理函数,否则信号将杀死这个进程。s原创 2011-09-21 00:08:23 · 7801 阅读 · 0 评论 -
测测你的Linux如何处理信号量?
在你的Linux系统中,一个进程是如何响应多个信号的?做个小实验~上代码。 #include#include#define INPUTLEN (100)int main(int ac, char* av[]){ void inthandler(int原创 2011-09-21 23:01:14 · 1351 阅读 · 0 评论 -
Ubuntu 9.10 构建Linux内核树
1. 查看内核版本:uname -r显示为:2.6.32-30-generic2. 搜索内核:apt-cache search linux-source显示为:linux-source - Linux kernel sour转载 2011-09-25 00:04:07 · 676 阅读 · 0 评论 -
Linux管道的一些细节
读管道: 1、进程从管道中读取数据时,进程被挂起直到数据被写进管道。(如果管道被两个进程共享,进程A关闭了读端,进程B读写都开启,B使用读端时,会一直等待B进程的写端的动作,而不会理会A的动作。) 2、当所有的写者关闭了管道的写数据端时,试图从管道中读取数据的原创 2011-10-04 22:18:28 · 658 阅读 · 0 评论 -
使用execvp()函数需要注意的两点
exec系统调用会从当前进程中把当前程序的机器指令清除,然后在空的进程中载入调用时指定的程序代码,最后运行这个新的程序。#include#include#include#include#define MAXARGS (20)#define ARGLEN原创 2011-09-28 00:42:49 · 4336 阅读 · 0 评论 -
Linux创建静态库
1、gcc -c joker.c mac.c创建.o文件,已编译,未链接的文件。2、ar crv libfoo.a joker.o mac.o对.o文件归档,把一组小的文件集中到一个大文件中,使用ar可以把任何类型的文件归为档案。3、ranlib libfoo.a为这个库创建一个内容表。可以这样引用: gcc -o program program.o libfoo.原创 2011-11-24 23:39:33 · 541 阅读 · 0 评论 -
Linux内核中的等待队列--init_waitqueue_head等
Linux内核中的等待队列 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在Linux2.4.21中,等待队列在源代码树include/linux/wait.h中,这是一个通过list_head连接的典型双循环链表。 在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t)和等待队转载 2012-01-30 23:41:19 · 796 阅读 · 0 评论 -
Linux下的微秒级定时器: usleep, nanosleep, select, pselect
今天在公司代码中看到了使用select函数的超时功能作定时器的用法,便整理了如下几个Linux下的微秒级别的定时器。在我的Ubutu10.10 双核环境中,编译通过。/* * @FileName: test_sleep.c * @Author: wzj * @Brief: * * * @History: * * @Date: 2012年02月07日星期二22:20:原创 2012-02-07 23:29:57 · 8826 阅读 · 0 评论 -
文件描述符、文件句柄、文件路径的转换接口
文件路径 到 文件指针:filepath --fopen()-->FILE*; 文件路径 到 文件描述符:filepath--open()--fd; 文件描述符 到 文件指针:fd--fdopen()-->FILE*; 文件描述符 到 文件路径:fd--readlink(/proc/%getpid()/fd/%fd"))-->filepath; 文件指针转载 2012-04-30 10:28:14 · 1510 阅读 · 0 评论