自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

鱼思故渊的专栏

不积跬步,无以至千里;不积小流,无以成江海

  • 博客(64)
  • 资源 (3)
  • 收藏
  • 关注

原创 linux 中的守护进程和僵尸进程

守护进程(daemon)是指在UNIX或其他多任务操作系统中在后台执行的电脑程序,并不会接受电脑用户的直接操控。此类程序会被以进程的形式初始化。守护进程程序的名称通常以字母“d”结尾:例如,syslogd就是指管理系统日志的守护进程。通常,守护进程没有任何存在的父进程(即PPID=1),且在UNIX系统进程层级中直接位于init之下。守护进程程序通常通过如下方法使自己 成为守护进程:对一个

2013-11-29 14:39:21 2742

原创 Makefile文件的作用

makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模块及库等).创建程序(make程序)首先读取makefile文件,然后再激活编译器,汇编器,资源编译器和连接器以便产生最后的输出,最后输出并生成的通常是可执行文件.创建程序利用内置的推理规则来激活编译器,以便通过对特定CPP文件的编译来产生特定的OBJ文件

2013-11-29 14:38:10 1463

原创 Makefile文件和shell脚本

1、在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的。比如如下代码就是没有任何输出:VAR="Hello"echo "$VAR"all: .....以上代码任何时候都不会输出,没有在target内,如果上述代码改为如下:VAR="Hello"all: echo "$VAR" .....以上代码,在make all的时候

2013-11-29 14:36:43 1324

原创 shell脚本和Makefile中的特殊变量

shell脚本中的特殊变量1. $# 传递到脚本的参数个数2. $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个3. $$ 脚本运行的当前进程ID号4. $! 后台运行的最后一个进程的进程ID号5. $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数6. $- 显示shell使用的当前选项,与set命令功能相同7. $? 显

2013-11-29 14:29:20 2319

转载 Linux/Unix环境下的make和makefile详解

无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或makeinstall。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入g

2013-11-29 10:58:44 3405

原创 Makefile.am 编写的语法规则

实战Makefile.am如果一个大的工程,有很多子模块组成, 那么每一个文件的编译都是自己写Makefile文件很是麻烦,使用自动生成的makefile将为自己省去很多麻烦,接下来,主要针对自动生成Makefile的过程和一些细节文件展开讨论分析。Makefile.am是一种比Makefile更高层次的规则。只需指定要生成什么目标,它由什么源文件生成,要安装到什么目录等构成。表一

2013-11-29 10:38:07 7520

原创 Makefile----shell函数和make的运行

一 shell函数shell函数也不像其它的函数。顾名思义,它的参数应该就是操作系统Shell的命令。它和反引号“`”是相同的功能。这就是说,shell函数把执行操作系统命令后的输出作为函数返回。于是,我们可以用操作系统命令以及字符串处理命令awk,sed等等命令来生成一个变量,如:    contents := $(shell cat foo)    file

2013-11-25 21:14:03 6453

原创 Makefile中的shell用法

在Makefile中写shell代码有点诡异,和不同的shell语法不太一样,如果不了解,看Makefile会莫名其妙。下面总结了一些。1:尽在Makefile文件的目标项冒号后的另起一行的代码才是shell代码。eg:xx = xx1         // 这里时makefile代码yy:xx = xx2   // 这是是makefile代码,makefile允许变量赋值时,

2013-11-25 21:12:58 27203 2

原创 LINUX中添加头文件的方式

在交叉编译的时候我们需要用到其他的库,在config时候可以通过“-I”来指定头文件目录,但是每次都需要设置的话难免有些麻烦,找到一个简单的方法。看下文的红色部分。有大量的环境变量可供设置以影响 GCC 编译程序的方式。利用这些变量的控制也可使用合适的命令行选项。一些环境变量设置在目录名列表中。这些名字和 PATH 环境变量使用的格式相同。特殊字符 PATH_SEPARATOR (安装编译

2013-11-25 20:29:58 7951

原创 Linux中C/C++编译添加头文件和库路径方式

环境变量设置/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。~/.bash_profile:每个

2013-11-25 20:27:21 26719

原创 cc1: error: unrecognized command line option "-m64" 需要添加上ARCH=arm

[root@localhost pwm2]# makemake -C  /work/cs/YL-9G45/linux-2.6.30  M=/work/rootfs/test/pwm2 modulesmake[1]: Entering directory `/work/cs/YL-9G45/linux-2.6.30'  CC [M]  /work/rootfs/test/pwm2/pwm

2013-11-19 19:18:39 16477

原创 error: unknown field 'ioctl' specified in initializer

在linux-2.6.36内核上加载编译驱动时,出现 error:unknown field 'ioctl' specified in initializer原因是:在2.6.36内核上file_operations发生了重大的改变:原先的  int (*ioctl)(struct inode*, struct file*, unsigned int, unsigned long)

2013-11-19 19:16:53 11380

原创 C中判断文件结束的两种方法feof()和EOF

判断文件结束有两种方法:EOF和feof() 查看stdio.h可以看到如下定义:[cpp] view plaincopyprint?#define EOF (-1)  #define _IOEOF 0x0010  #define feof(_stream) ((_stream)->_flag & _IOEO  由此可以看出,这两种方式的原理

2013-11-17 10:31:56 7877

原创 在Linux下创建一个大文件,即制造磁盘IO异常,使用dd命令

例如: 我们要创建一个10G的文件,方法是:dd if=/dev/zero of=./bill_test bs=1G count=10 其中dd是磁盘硬拷贝命令,/dev/zero是一个特殊文件,永远读不完。类似的文件还有/dev/null是一个空文件,清空文件是echo /dev/null > ./bill_test if=file_name_in 表示input fil

2013-11-17 09:56:21 4074

原创 恢复ubuntu中的面板管理 restore ubuntu gnome panel

今天误删除Ubuntu系统中上下两个menu 所在的panel ,以及电源管理的一些选项系统最上面的菜单栏以及下面的状态都不见了,下面是具体解决的过程 直接按 Alt + F2,然后在出来的对话框中输入 gnome-terminal , 回车执行 弹出命令行终端,或者 Ctrl + Alt + T 弹出命令行终端输入  gconftool-2 --shutdown

2013-11-16 12:01:36 2835

原创 关于:(.text+0x21): undefined reference to `shm_open'问题

C programming in the UNIX environment的编程手册,一般都会为进程间用共享内存的方法通信提供两组方法:1.      POSIX定义的:int shm_open(const char *name, int oflag, mode_t mode);int shm_unlink(const char *name);int ftruncate(int f

2013-11-11 21:36:22 10064 1

原创 linux进程间通信(IPC)--共享内存

从表面上看,UNIX® 应用程序单独控制底层主机。它随时可以访问处理器,它的内存是神圣不可侵犯的,连接它的设备只为它服务。但是表面现象会骗人,这样有如君主一般的绝对地位只是幻想而已。UNIX 系统同时运行大量应用程序,有限的物理资源要在它们之间共享。处理器能力被划分为时间片,应用程序映像经常被换入和换出真实内存,设备访问由需求驱动,还受到访问权限的限制。尽管您的 shell 提示符不断闪烁,但是

2013-11-11 21:25:07 1938

转载 打造高性能日志系统

前言   说起日志系统, 大家都不陌生, 每次线上出了问题, 大家通常都会第一时间抓log回来进行分析, 很多时候这些log是我们恢复现场的重要途径也可能成为了唯一手段, 所以重要性不言而喻. 市面上的开源日志系统有很多, 如log4cxx, log4cpp, glog等等, 最终目的都只有一个 -- 写日志. 于是如何优雅,高效,安全的写日志是大家的一致需求.   说起优雅, 这里我指的

2013-11-10 19:46:14 3957 4

原创 再次深入了解epoll

一、 介绍Epoll 是一种高效的管理socket的模型,相对于select和poll来说具有更高的效率和易用性。传统的select以及poll的效率会因为 socket数量的线形递增而导致呈二次乃至三次方的下降,而epoll的性能不会随socket数量增加而下降。标准的linux-2.4.20内核不支持epoll,需要打patch。本文主要从linux-2.4.32和linux-2.6.10

2013-11-10 17:15:08 4111

原创 epoll机制:epoll_create、epoll_ctl、epoll_wait、close

在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,linux/posix_types.h头文件有这样的声明:#define__FD_S

2013-11-10 13:59:26 134698 13

原创 linux新API--eventfd的使用方法

eventfd 在内核版本,2.6.22以后有效。查看内核版本可以用命令 uname -r 。[cpp] view plaincopyprint? #include  int eventfd(unsigned int initval,int flags);这个函数会创建一个 事件对象 (eventfd object), 用来实现,进程(线程)间的

2013-11-10 11:46:19 14019 1

原创 经典排序算法--归并排序算法分析

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plaincopy//

2013-11-09 14:27:03 2140

原创 堆排序算法分析

先把代码贴上去:#include #include #include void max_heap(int a[],int n){ int l,r,tmp,largst; l=2*n; r=2*n+1; largst=n; if(a[l]>a[n]&&l<=a[0]) largst=l; if(a[largst]<a[r]&&r<=a[0]) largst=r;

2013-11-09 14:11:58 1311

转载 堆排序算法

精通八大排序算法系列:二、堆排序算法 作者:July 、二零一一年二月二十日本文参考:Introduction To Algorithms,second edition。-------------------     此精通排序算法系列,前一节,已讲过了一、快速排序算法,其中,快速排序每一趟比较用时O(n),要进行lgn次比较,才最终完成整个排序。所以快排的复杂度才为O(n*l

2013-11-09 09:18:13 1272

转载 从头到尾彻底解析hash表算法

十一、从头到尾彻底解析Hash 表算法作者:July、wuliming、pkuoliver  出处:http://blog.csdn.net/v_JULY_v。  说明:本文分为三部分内容,    第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。--------------------------

2013-11-09 08:56:10 1614

原创 TSD中的几个函数,pthread_key_create pthread_getspecific

在多线程程序中,经常要用全局变量来实现多个函数间的数据共享。由于数据空间是共享的,因此全局变量也为所有进程共有。但有时应用程序设计中必要提供线程私有的全局变量,这个变量仅在线程中有效,但却可以跨过多个函数访问。比如在程序里可能需要每个线程维护一个链表,而会使用相同的函数来操作这个链表,最简单的方法就是使用同名而不同变量地址的线程相关数据结构。这样的数据结构可以由 Posix 线程库维护,成

2013-11-07 21:51:49 5511

转载 linux中open()函数的mode_t 含义

打开文件、新建文件和关闭文件操作打开文件操作使用系统调用函数open(),该函数的作用是建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作。打开文件的一般形式是:open(文件路径, 标志); 函数的返回值是文件描述符,如果打开文件成功返回一个正整数,否则返回-1。标志是用于指定打开文件操作模式的枚举常量,主标志如表13.1所示。表13.1  打开文

2013-11-07 20:47:28 5584

原创 linux环境进程间通信:信号(上)

一、信号及信号来源信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基

2013-11-06 22:48:14 1116

原创 linux环境进程间通信:信号(下)

一、信号生命周期从信号发送到信号处理函数的执行完毕对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生;信号在进程中注册完毕;信号在进程中的注销完毕;信号处理函数执行完毕。相邻两个事件的时间间隔构成信号生命周期的一个阶段。下面阐述四个事件的实际意义:信号"诞生"。信号的诞生指的是触发信

2013-11-06 22:46:48 1136

转载 linux多线程编程的基本规则

准则1:不依赖于信号收发的设计。 给其它进程以及自己发送异步信号并改变处理流程的设计不要做。不要把信号和线程一起使用,这将使得程序动作的预测和调试变得困难。准则2:要知道信号处理函数中可以做哪些处理。 在sigaction()函数登记的信号处理函数中可以做的处理是被严格限定的。仅允许:局部变量的相关处理volatile sig_atomic_t类型的全局变量操作

2013-11-06 22:40:53 1444

转载 关于进程、线程、轻量级进程的笔记

在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。线程有自己的私有数据:程序计数器,栈空间以及寄存器。Why Thread?(传统单线程进程的缺点)1. 现实中有很多需要并发处理的任务

2013-11-06 22:36:14 1047

转载 linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)

linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR) linux内核的三种调度方法:1,SCHED_OTHER 分时调度策略,2,SCHED_FIFO实时调度策略,先到先服务3,SCHED_RR实时调度策略,时间片轮转 linux内核的三种调度方法:1,SCHED_OTHER 分时调度策略,2,SCHED_FIFO实时调度策略,先到先

2013-11-06 22:34:25 1208

转载 Linux 线程实现机制分析

一.基础知识:线程和进程按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开销。无论按照怎样的分法,一个进程至少需要一个线程作为它的指令执行体,进程管理着资源(比如cpu、内存、文件等等),而将线程分配到某个cpu上执行。一个进程当然可以拥有多个线程,此时,如果进程运行

2013-11-06 22:33:15 1043

转载 Linux 实时信号程序中锁的探索

Linux 下的实时信号更类似于软件层次的“中断”,它可能发生在任何时刻,而这与程序的运行必然存在一定的冲突。本文将针对这种状况,介绍相应的处理方案。前言Linux 下的信号分为可靠信号和不可靠信号,或称为实时信号和非实时信号,对应于 Linux 的信号值为 1-31 和 34-64。对于他们的分类以及应用的时的区分并不在本文的讨论范围之内,读者可参考文献 1,对其应用做初步的了解

2013-11-06 22:21:21 1026

原创 多线程中的信号机制--sigwait()函数

在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别,可以说是完全不同。在进程环境中,对信号的处理是,先注册信号处理函数,当信号异步发生时,调用处理函数来处理信号。它完全是异步的(我们完全不知到信号会在进程的那个执行点到来!)。然而信号处理函数的实现,有着许多的限制;比如有一些函数不能在信号处理函数中调用;再比如一些函数read、recv等调用时会被异步的信号给中断(inter

2013-11-06 18:41:29 16387 1

原创 linux中使用信号--sigwait()和pthread_sigmask()

1. sigwait函数:sigwait等一个或者多个指定信号发生。    它所做的工作只有两个:第一,监听被阻塞的信号;第二,如果所监听的信号产生了,则将其从未决队列中移出来(这里实时信号和非实时信号又有区别,体现在取出的顺序等,具体自己取网上查,这里不再详述)。sigwait并不改变信号掩码的阻塞与非阻塞状态。    在POSIX标准中,当进程收到信号时,如果是多线程的情况,我们是

2013-11-06 17:29:54 19174 4

转载 linux下多线程和信号处理

linux信号种类1、可靠信号和不可靠信号       "不可靠信号"        Linux信号机制基本上是从Unix系统中继承过来的。早期Unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,因此,把那些建立在 早期机制上的信号叫做"不可靠信号",信号值小于SIGRTMIN(Red hat 7.2中,SIGRTMIN=32,SIGRTMAX=63)的信号都是不可

2013-11-06 16:26:34 2699

转载 Linux 多线程应用中如何编写安全的信号处理函数

关于代码的可重入性,设计开发人员一般只考虑到线程安全,异步信号处理函数的安全却往往被忽略。本文首先介绍如何编写安全的异步信号处理函数;然后举例说明在多线程应用中如何构建模型让异步信号在指定的线程中以同步的方式处理。Linux 多线程应用中编写安全的信号处理函数在开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_mutex 去保护全局变量。如果应用中使用了信号,

2013-11-06 16:00:01 2518

转载 原来Muduo是一个人自己写的!!!

陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice2010 Aug 30本文主要介绍 muduo 网络库的使用。其设计与实现将有另文讲解。由来半年前我写了一篇《学之者生,用之者死——ACE历史与简评》,其中提到“我心目中理想的网络库”的样子:        线程安全,支持多核多线程        不考虑可移植性,不跨平台,

2013-11-06 15:04:25 5561 1

转载 谈一谈网络编程的经验

谈一谈网络编程学习经验 陈硕 giantchen@gmail.com blog.csdn.net/Solstice 2011-06-06 PDF 版下载:https://github.com/downloads/chenshuo/documents/LearningNetworkProgramming.pdf本文谈一谈我在学习网络编程方面的一些个人经验。“网络编程”这个术语

2013-11-06 14:38:24 2632

nginx源码分析--带注释

nginx源码分析,分析过程中将重要的部分进行了注释,以便理解

2014-11-26

libevent-1.4.12-stable-注释版

注释了libevent中很关键的部分,很重要的接口函数。

2014-03-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除