
Unix编程
wangwenwen
这个作者很懒,什么都没留下…
展开
-
SQLite3性能优化
SQLite3性能调整主要通过pragma指令来实现。比如调整:空间释放、磁盘同步、Cache大小等。一.空间释放1.如何查询:PRAGMA auto_vacuum;含义:查询数据库的auto-vacuum标记。2.标记含义:auto-vacuum标记的含义:正常情况下,当提交一个从数据库中删除数据的事务时,数据库文件不改变大小。未使用的文件页被标记并在以后的添加操转载 2013-04-07 17:36:18 · 1703 阅读 · 0 评论 -
多线程调试--死锁,死循环都可用这个方法
_doMonitor线程中,重复加同一个锁,引起死锁。[root@localhostroot]# gdb attach 131081(gdb) infothreads 26Thread 540697 (LWP 30861) 0x00c40094 in__pthread_sigsuspend () from /lib/i686/libpthread.so.0 25T原创 2013-10-15 22:19:16 · 3362 阅读 · 0 评论 -
List单链表封装
typedef struct T_RelayCallItem{ char caller[MAX_PHONE_NUM]; char callee[MAX_PHONE_NUM]; union { tSingleCallInfo single; tTalkbackCallInfo talkback; }INFO;}tRelayCal原创 2014-08-20 14:20:12 · 642 阅读 · 0 评论 -
ioctl与ifreq、ifconf的使用
#include int ioctl( int fd, int request, .../* void *arg */ ); 返回0——成功, -1——出错第一个参数 fd 指示某个文件描述符(当然也包括 套接口描述符)第二个参数 request 指示要ioctl执行的操作第三个参数 总是某种指针,具体的指向类型依赖于request 参数--------------------转载 2014-10-18 09:53:38 · 3314 阅读 · 0 评论 -
僵尸进程的产生与处理
什么是僵尸进程 僵尸进程是指它的父进程已经退出(父进程没有等待(调用wait/waitpid)它),而该进程dead之后没有进程接受,就成为僵尸进程,也就是(zombie)进程。 僵尸进程是怎么样产生 一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将转载 2012-02-02 20:53:13 · 788 阅读 · 0 评论 -
Linux线程同步之读写锁
读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。1. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞;2. 当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是以写模式对它进行枷锁的线程将阻塞;3. 当读写锁在读模式锁状态时,如果有另外线程试图以写模式加锁,读写锁通常转载 2014-10-23 11:37:00 · 739 阅读 · 0 评论 -
alaw与ulaw编码转换与静音检测
#include "stdafx.h"#define SMP_MOD 0x84#define MASK 32635unsigned char __ant_lin2mu[16384];short __ant_mulaw[256];static unsigned char _Linear2Ulaw(short p_val) { static int exp_lut[25原创 2014-09-03 09:47:38 · 8816 阅读 · 1 评论 -
setjump 和 longjump
goto语句看起来是处理异常的更可行方案。不幸的是,goto是本地的:它只能跳到所在函数内部的标号上,而不能将控制权转移到所在程序的任意地点(当然,除非你的所有代码都在main体中)。为了解决这个限制,C函数库提供了setjmp()和longjmp()函数,它们分别承担非局部标号和goto作用。头文件申明了这些函数及同时所需的jmp_buf数据类型。原创 2014-08-09 14:00:09 · 6461 阅读 · 1 评论 -
linux守护进程实现
#include #include #include #include #include #include #include #include #include char * pid_file = "/var/run/daemon.pid";int init_daemon(){ int pid ; FILE * lockfd = NULL原创 2012-02-05 23:40:03 · 590 阅读 · 0 评论 -
socket select
#define RELAY_IP "0.0.0.0"#define RELAY_PORT "502"struct RelayDeviceInfo{ unsigned int addr; short port; int sockfd; int useflag;};int relay_listen_sock = 0;struct RelayDeviceInfo relaydev原创 2014-08-20 14:31:03 · 616 阅读 · 0 评论 -
Linux下网络编程(select/poll/epoll)
#include #include #include #include #include #include #include #include #include #include #include #include #define SERV_PORT 5060#define SERVER_IP "192.168.2.35转载 2012-02-08 22:48:47 · 1766 阅读 · 0 评论 -
Posix共享内存区
1、概述 Posix提供了两种在无亲缘关系进程间共享内存区的方法:(1)内存映射文件:先有open函数打开,然后调用mmap函数把得到的描述符映射到当前进程地址空间中的一个文件(上一篇笔记所用到的就是)。(2)共享内存区对象:先有shm_open打开一个Posix IPC名字(也可以是文件系统中的一个路径名),然后调用mmap将返回的描述符映射到当前进程的地址空间。者两种方法多需要转载 2014-10-26 11:57:08 · 824 阅读 · 0 评论 -
pipe管道
1. 测试发现,pipe管道容量约为4M。就是说,一直往管道写,最多写入4M,然后就会阻塞,之后读走num个字符才能再写入num个字符。2. 管道可用于父子进程、亲缘进程通信。#include #include int main(){ int pipe_fd[2]; pid_t pid; char r_buf[4]; char* w_buf;原创 2013-05-22 11:39:35 · 953 阅读 · 0 评论 -
Posix消息队列
消息队列可以认为是一个消息链表,某个进程往一个消息队列中写入消息之前,不需要另外某个进程在该队列上等待消息的达到,这一点与管道和FIFO相反。Posix消息队列与System V消息队列的区别如下:1. 对Posix消息队列的读总是返回最高优先级的最早消息,对System V消息队列的读则可以返回任意指定优先级的消息。2. 当往一个空队列放置一个消息时,Posix消息队列允许产生一个信号或转载 2014-10-26 11:19:27 · 646 阅读 · 0 评论 -
linux驱动开发第一例
1. Code#include #include MODULE_LICENSE("GPL");static int times=1;module_param(times,int,S_IRUGO);static int hello_init(void){int i=0;for(;i printk(KERN_ALERT "hello,word/n");ret原创 2012-11-08 10:56:17 · 548 阅读 · 0 评论 -
修改initrd文件
打包:A)含子目录打包: find /usr/lib -print | cpio -o > /usr/temp.cpioB)不含子目录的打包:ls /usr/lib | cpio -o > /usr/temp.cpioC)特定文件打包: ls /usr/lib/*.原创 2011-07-31 11:37:45 · 2581 阅读 · 0 评论 -
linux 构建内核树
1. RPM包构建:安装iso中三个kernel相关的rpm包。kernel-2.6.23.1-42.fc8.i686.rpmkernel-devel-2.6.23.1-42.fc8.i686.rpmkernel-headers-2.6.23.1-42.fc8.i386.rpm2. 源码构建:root@localhost /usr/src#tar jxvf linux-so原创 2012-11-08 11:15:41 · 716 阅读 · 0 评论 -
字符设备与块设备的区别
在LINUX里面,设备类型分为:字符设备、块设备以及网络设备, PCI是一种和ISA为一类的总线结构,归属于网络驱动设备 系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的设备被称作块设备,这些数据片就称作块。最常见的块设备是硬盘,除此以外,还有软盘驱动器、CD-ROM驱动器和闪存等等许多其他块设备。注意,它们都是以安装文件系统的方式使用的——这也是块设备的转载 2012-11-26 16:27:20 · 2006 阅读 · 0 评论 -
linux进程控制块
进程在操作系统中都有一个户口,用于表示这个进程。这个户口操作系统被称为PCB(进程控制块),在linux中具体实现是 task_struct数据结构,它记录了一下几个类型的信息:1.状态信息,例如这个进程处于可执行状态,休眠,挂起等。2.性质,由于unix有很多变种,进程有自己独特的性质。3.资源,资源的链接比如内存,还有资源的限制和权限等。4.组织,例如按照家族关系建立起来的树(转载 2013-05-03 11:25:28 · 8906 阅读 · 0 评论 -
80X86寄存器介绍
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的转载 2013-05-09 16:13:10 · 755 阅读 · 0 评论 -
Linux内核相关文章
1. Linux内核引导内幕http://www.ibm.com/developerworks/cn/linux/l-linuxboot/原创 2014-06-26 15:02:52 · 577 阅读 · 0 评论 -
Linux 信号signal处理机制
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。一、信号的基本概念 本节先介绍信号的一些基本概念,然后给出一些基转载 2012-04-22 00:53:13 · 524 阅读 · 0 评论 -
Posix信号量
进程间通信方式:(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。 管道包括三种: 1)普通管道PIPE, 通常有种限制,一是半双工,只能单向传输;二是只能在父子进程间使用. 2)流管道s_pipe: 去除了第一种限制,可以双向传输. 3)命名管道:name_pipe, 去除了第二种限制,可以在许多并不相关的进转载 2012-02-02 20:33:43 · 682 阅读 · 0 评论 -
进程通信/线程同步方式总结
Unix进程通信方法:1.信号(signal)2.管道(pipe):父子进程,单向传输3.流管道(popen/pclose):可双向传输4.命名管道(mkfifo):可任意进程传输5.socket6.消息队列:msgget/msgctl/msgrcv/msgsnd7.共享内存:shmget/shmat/shmdt/shmctl8.信号灯:semget/semctl/原创 2011-08-01 23:01:26 · 743 阅读 · 0 评论 -
linux内存段及命令行下查看
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(code segment/text segment)通常是指用原创 2013-12-31 17:47:42 · 3974 阅读 · 0 评论 -
linux下进程的最大线程数、进程最大数、进程打开的文件数
2.4内核默认配置:[root@localhost asg]# ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedfile size (blocks, -f) unlimitedmax locked memory (kb转载 2013-03-11 15:59:46 · 3310 阅读 · 0 评论 -
PCRE-C语言正则表达式
#define PCRE_STATIC // 静态库编译选项 #include #include #include #define OVECCOUNT 30 /* should be a multiple of 3 */ #define EBUFLEN 128 #define BUFLEN 1024 #pragma comment (转载 2012-05-18 00:16:35 · 2075 阅读 · 0 评论 -
linux signal使用注意点
1. 信号安装后,只生效一次。要重复可接受信号,需要重新安装。void sigroutine(int signo){ sig_alarm_flag = 1; signal(SIGALRM, sigroutine);}2. 在信号处理程序中调用不可重入函数,其结果是不可预见的。 #include #include #include #in原创 2013-04-22 16:24:07 · 1184 阅读 · 0 评论 -
kill函数,raise函数,alarm函数,pause函数
1. kill函数将信号发送给进程或者进程组。int kill(pid_t pid,int signo);? pid > 0 将信号发送给进程ID为pid的进程。? pid == 0 将信号发送给其进程组ID等于发送进程的进程组ID,而且发送进程有许可权向其发送信号的所有进程。这里用的术语“所有进程”不包括实现定义的系统进程集。对于大多数UNIX系统,系统进程集包括:交换进原创 2012-04-22 00:45:46 · 767 阅读 · 0 评论 -
setitimer函数
setitimer函数功能介绍在linux下如果定时如果要求不太精确的话,使用alarm()和signal()就行了,但是如果想要实现精度较高的定时功能的话,就要使用setitimer函数。1. 单次计时2. 循环计时setitimer函数参数介绍int setitimer(int which, const struct itimerval *value, struct i原创 2013-04-22 16:43:53 · 1035 阅读 · 0 评论 -
Linux的inode的理解
原文地址:http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html文件名 -> inode -> device block 一、inode是什么?理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不转载 2013-04-03 10:37:30 · 544 阅读 · 0 评论 -
Linux Epoll介绍和程序实例
1. Epoll 是何方神圣? Epoll 可是当前在 Linux 下开发大规模并发网络程序的热门人选, Epoll 在 Linux2.6 内核中正式引入,和 select 相似,其实都 I/O 多路复用技术而已 ,并没有什么神秘的。其实在 Linux 下设计并发网络程序,向来不缺少方法,比如典型的 Apache 模型( Process Per Connection ,简称 PPC ),转载 2012-02-07 22:28:27 · 459 阅读 · 0 评论 -
用GDB调试程序
GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。而Windows下的图转载 2012-04-22 01:11:53 · 548 阅读 · 0 评论 -
Linux线程同步之条件变量
与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。条件的检测是在互斥锁的保护下进行的。如果一个条件为假,一个转载 2012-04-23 23:34:02 · 563 阅读 · 0 评论 -
Linux静态库和动态库学习总结
一、废话之前由于工作需要,要封装一个Linux加密解密转换的动态库,这个之前只做过Windows下面的,Linux下面还真没有做过,之后做了整一个晚上才算做好,不过其中也学到了不少东西,包括Linux下的动态库和静态库,MakeFile等等。之前就已经写了一个练习,之后怕又忘了,总结一下备忘,以后也好查。很大部分内容都是收集的一些东西还有自己学习的体会,有什么错误或者问题请直接提出。转载 2012-02-29 22:42:45 · 15152 阅读 · 1 评论 -
Linux下GCC使用方法简介
编译:第一步、是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程:gcc -E hello.c -o hello.i预处理的宏定义插入到hello.i中第二步、是将hello.i编译为目标代码,这可以通过使用-c参数来完成:gcc -c hello.i -o hello.o也可以通过源文件直接生成gcc -c hello.c第三步、是将生成的目转载 2013-03-29 10:40:18 · 667 阅读 · 0 评论 -
linux库文件编写入门 && 使用和生成库
一、为什么要使用库文件 我们在实际编程工作中肯定会遇到这种情况:有几个项目里有一些函数模块的功能相同,实现代码也相同,也是我们所说的重复代码。比如,很多项目里都有一个用户验证的功能。代码段如下: //UserLogin.h文件,提供函数声明 int IsValidUser(char* username, int namelen); //UserLog转载 2013-03-29 10:37:08 · 582 阅读 · 0 评论 -
进程组、会话期、控制终端
一、进程组 每个进程除了有一个进程ID外,还属于一个进程组(process group)。 进程组是一个或者多个进程的集合。每个进程组中有一个唯一的进程组ID。函数getpgrp返回调用进程的进程组ID:#include #include pid_t getpgrp(void) 每个进程组有一个组长进程,组长进程的标识是其进程ID等于其进程组ID。转载 2013-04-28 14:27:02 · 1523 阅读 · 0 评论 -
BSS段,数据段,代码段,堆内存和栈
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。 代码段:代码段(code segment/text segment)通常是指转载 2013-05-13 17:27:20 · 1381 阅读 · 0 评论 -
字符串处理 - ANSI - Unicode - UTF8 转换
2008-11-4: 使用MultiByteToWideChar和WideCharToMultiByte写的4个ANSI Unicode UTF-8 相互转换的函数。2008-11-5: 使用C语言标准库mbstowcs和wcstombs写的w2m和m2w两个函数,分别对应ANSI Unicode 相互转换。2008-11-8: 包装一下 ANSI UTF-8 。 #include转载 2012-05-19 10:51:49 · 709 阅读 · 0 评论