Linux C
在云边听雨
这个作者很懒,什么都没留下…
展开
-
Facebook开源C语言事件框架:libPhenom
libPhenom是Facebook发布的一个C语言事件框架,用于构建高性能和高可扩展的系统。支持多线程、提供内存管理和常用数据结构、JSON处理。特性如下:带有计数器的内存管理——记录应用程序正使用的内存类型的次数工作——分解你的应用程序并用调度管理来搞定它们带缓冲的I/O流常用的数据结构(哈希表、列表、队列)数据类型的变种来使能J转载 2016-06-07 08:18:54 · 1606 阅读 · 6 评论 -
Linux共享内存,打印系统IPC信息
#include #include #include #include #include #define BUFSZ 4096int main(int argc, char **argv){int shm_id;shm_id = shmget(IPC_PRIVATE,BUFSZ,0666);if(shm_id {perror("shmget");原创 2015-10-10 08:56:50 · 410 阅读 · 0 评论 -
UDP计算校验和
static unsigned short checksum(unsigned short *pwbuffer,uint32_t size) { unsigned long cksum=0; while(size > 1){ cksum+=*pwbuffer++; size-=sizeof(uint16_t);原创 2015-10-23 10:58:45 · 683 阅读 · 0 评论 -
字符统计
#include #include #define MAX 1024int main(void){ FILE *fp; char buf[MAX]; int n; char *p; int letter, number, blank; fp = fopen("test.txt", "rb"); /* 打开该文件 */ if(fp == NULL) { perror("f原创 2015-10-22 14:23:42 · 288 阅读 · 0 评论 -
Linux下cp命令实现
#include #include /* 程序使用方法:copy src des* 本程序并未做输入的出错处理,例如,文件路径的正确性以及目标文件是否已经存在等*/int main(int argc, char *argv[ ]){ FILE *fp1, *fp2; /* 源文件和目标文件 */ char buf[1024]; int nbytes; if(argc != 3原创 2015-10-22 13:37:48 · 393 阅读 · 0 评论 -
.ini文件转换为.xml文件
config.ini文件#config of network 有关网络的配置信息!networkip=192.168.11.6port=8000home-path=/home/admin/#config of database 有关数据库的配置信息!databaseserver=oracleuser=adminpassword=123456config.xml文原创 2015-10-22 10:55:33 · 1053 阅读 · 0 评论 -
Linux逐行读取文件内容
#include #include #include #define MAX_LINE 1024int main(void){ char buf[MAX_LINE]; /* 缓冲区 */ FILE *fp; int len; if((fp = fopen("test.txt", "r")) == NULL){ /* 打开文件 */ perror("fail to read")原创 2015-10-22 10:03:19 · 780 阅读 · 0 评论 -
Linux下ls命令实现
#include #include #include #include #include #define MAX 1024void my_ls(char *root){ DIR * dir; struct dirent * ptr; int count; dir = opendir(root); /* 打开目录 */ if(dir == NULL){ perror("f原创 2015-10-20 10:16:30 · 413 阅读 · 0 评论 -
Linux下ps命令实现
#include #include #include #include #include #include #include #define MAX 1024#define PATH_SIZE 128int main(void){ DIR *dir; struct dirent *entry; FILE *fp; char path[PATH_SIZE]; char原创 2015-10-21 14:03:49 · 2660 阅读 · 0 评论 -
linux c回调函数
common.h#include #include #include /* 定义一个自定义类型的函数指针,返回值是整型,两个参数是两个任意类型的指针 * 该函数的两个参数分别是需要比较的两个对象,在比较时将其转换* 如果大于则返回1,等于则返回0,小于则返回-1*/typedef int (*cmp)(void *, void *);typedef struct book* B原创 2015-09-16 14:46:37 · 612 阅读 · 0 评论 -
Linux下递归读取文件数量
#include #include #include #include #include #define MAX 1024/* get_file_count函数的参数是一个路径,表示目录树的根。* 该函数返回参数指定目录下所有普通文件的数目。*/int get_file_count(char *root){ DIR * dir; struct dirent * ptr;原创 2015-10-20 10:00:13 · 855 阅读 · 0 评论 -
可变参数处理,stdarg.h
#include #include int print_ags(int begin,...){ va_list ap; char* p; int n; va_start(ap,begin); p = va_arg(ap,char*); n = 0; while(p != NULL) { n++; printf("arg %d: %s\n",n,p); p = v原创 2015-09-06 16:40:20 · 312 阅读 · 0 评论 -
Linux线程同步---互斥量
#include #include #include #include #include #define MAX_ITEM 3 /* 每次最多取三个任务 */typedef struct job * Job; /* 链表结点结构 */struct job{ pthread_t tid; /* 线程ID */ Job next; /* 下一个链表结点 */ int val;原创 2015-10-13 11:15:58 · 248 阅读 · 0 评论 -
文件读写函数因为信号中断异常返回处理
extern ssize_t my_read(int fd,void *buffer, size_t length);extern ssize_t my_write(int fd,void *buffer, size_t length);/* iolib.c 自己的文件I/O函数库 */#include #include #include /* 封装read函数,增加可出错处原创 2015-10-27 09:39:30 · 1242 阅读 · 0 评论 -
linux文件类型
#include #include #include int main(int argc, char * argv[]){ char *str; int i; struct stat buf; /* 存储文件状态信息 */ for(i = 1; i < argc; i++){ printf("%s is ", argv[i]); if(stat(argv[i],原创 2015-10-15 14:02:38 · 250 阅读 · 0 评论 -
网络数据老化代码
memset(&tCurTime, 0, sizeof(struct timeval)); for (i = 0;i < MAX_ACL_GROUP_NUM;i++) { if (0 == gtDomainInfo[i].dwGroupId) { continue; } OssUserLogInfo("ApMonitorMgrUpdateDomainInfo:Beg转载 2016-06-03 17:27:32 · 792 阅读 · 1 评论 -
ARM Linux内核启动过程
Linux Kernel Start ARM ARM Linux内核启动过程.Updated Feb 24, 2011 by [email protected]注: 本文转自ChinaUnix 作者为XPL.本文针对arm linux, 从kernel的第一条指令开始分析,一直分析到进入 start_kernel()函数. 我们当前以linux-2转载 2015-01-10 18:28:06 · 638 阅读 · 0 评论 -
详解 ARM Linux启动过程分析
详解 ARM Linux启动过程分析ARM Linux启动过程分析是本人要介绍的内容,嵌入式 Linux 的可移植性使得我们可以在各种电子产品上看到它的身影。对于不同体系结构的处理器来说Linux的启动过程也有所不同。本文以S3C2410 ARM处理器为例,详细分析了系统上电后 bootloader的执行流程及 ARM Linux的启动过程。转载 2015-01-10 18:23:23 · 356 阅读 · 0 评论 -
Linux内核Jhash
static uint32_t jhash(const void *key, unsigned int length, unsigned int initval);static int32_t mac_hash(const unsigned char *mac);/******************************* 静态函数原型**************************转载 2016-04-01 09:30:49 · 5606 阅读 · 2 评论 -
编程修养
不要忽略warning请sizeof类型而不是变量尽量用for而不是while做循环p = pHead;while(p){ ... ... p = p->next;}当while的语句块变大后for(p = pHead; p; p = p->next){ ...}为常量声明宏全局变量应该尽量少用,全局变量不利于转载 2016-03-31 15:09:53 · 287 阅读 · 0 评论 -
代码原则一
1 基本原则【规则1-1】首先为人编写程序,其次才是计算机。说明:这是软件开发的基本要点,软件的生命周期贯穿产品的开发、测试、生产、用户使用、版本升级和后期维护等长期过程,只有易读、易维护的软件代码才具有生命力。【规则1-2】保持代码的简明清晰,避免过分的技巧。说明:简单是最美。保持代码的简单化是软件工程化的基本要求。不要过分追求技巧,否则会降低程序的可读性。【规则1-3】所有转载 2015-12-30 11:18:10 · 606 阅读 · 0 评论 -
代码原则三
【规则6-1】一条语句只完成一个功能。说明:复杂的语句阅读起来,难于理解,并容易隐含错误。变量定义时,一行只定义一个变量。正例:aiAge[i] = i;i++;反例:aiAge[i] = i++; // 一条语句实现了多个功能正例:int iHelp;int iBase;int iResult;iHelp = iBase;iResult =转载 2015-12-30 11:20:59 · 585 阅读 · 0 评论 -
代码原则五
【规则10-1】整个软件系统应该采用统一的断言。如果系统不提供断言,则应该自己构造一个统一的断言供编程时使用。说明:整个软件系统提供一个统一的断言函数,如Assert(exp), 同时可提供不同的宏进行定义(可根据具体情况灵活设计),如:(1)#define ASSERT_EXIT_M 中断当前程序执行,打印中断发生的文件、行号,该宏一般在单调时使用。(2)#define ASSERT转载 2015-12-30 11:29:45 · 423 阅读 · 0 评论 -
linux fork函数与vfork函数
一、fork1. 调用方法#include #include pid_t fork(void);正确返回:在父进程中返回子进程的进程号,在子进程中返回0错误返回:-1 子进程是父进程的一个拷贝。即,子进程从父进程得到了数据段和堆栈段的拷贝,这些需要分配新的内存;而对于只读的代码段,通常使用共享内存的方式访问。fork返回后,子进程和父进程都从调用fork函数返回转载 2015-11-26 11:30:04 · 230 阅读 · 0 评论 -
Linux文件屏蔽字
Linux环境下使用umask()函数创建一个权限屏蔽字,其函数原型如下:#include mode_t umask(mode_t cmask);umask的参数表示一个新的屏蔽字,其类型为mode_t类型。mode_t类型也是一个位向量,对应9位权限标志位。哪一位的屏蔽位为1,说明用户在创建文件时所指定的权限标志无效,新文件不具有该权限;如为0则相反,是否具有该权限,取决于用户的权限原创 2015-10-15 16:18:41 · 1351 阅读 · 0 评论 -
Linux文件权限
#include #include #include int main(void){ struct stat buf; if(stat("./test.txt", &buf) == -1){ /* 取得文件状态信息 */ printf("stat error\n"); exit(0); } if((buf.st_mode & S_IRGRP) != 0) /* 测试组用户是原创 2015-10-15 14:11:13 · 251 阅读 · 0 评论 -
FIFO管道问题
在服务器端打开公共FIFO的时候,如果仅以读打开,则所有的客户端都退出时,服务器端会读取到文件结束符。这个问题的解决办法是服务器以读写打开公共的FIFO。原创 2015-08-07 14:31:59 · 298 阅读 · 0 评论 -
匿名管道在兄弟进程的应用
#include #include #include #include #include #include #define BUFSZ PIPE_BUFvoid err_quit(char * msg){perror( msg );exit(1);}int main ( void ){int fd[2];char buf[BUFS原创 2015-08-07 13:31:56 · 639 阅读 · 0 评论 -
Linux高性能服务器编程---I/O模型
I/O模型对比:阻塞I/O,程序阻塞于读写函数I/O复用,程序阻塞于I/O复用系统调用,但可同时监听多个I/O事件,对I/O本身的读写操作是非阻塞的。常用的I/O复用函数时select,poll,epoll_wait。SIGIO信号,信号触发读写就绪事件,用户程序执行读写操作。程序没有阻塞阶段。异步I/O,内核执行读写操作并触发读写完成事件。程序没有阻塞阶段。 两种高效的事原创 2015-04-28 13:09:47 · 418 阅读 · 0 评论 -
Linux高性能服务器编程--- 网络函数
现代PC大多采用小端字节序,因此称为主机字节序; 大端字节序称为网络字节序。Linux提供了如下4个函数来完成主机字节序和网络字节序之间的转换。#includeUnsigned long int htonl(unsigned long int hostlong);Unsigned short int htons(unsigned short int hostshort);Uns原创 2015-04-13 11:00:54 · 489 阅读 · 0 评论 -
Linux高性能服务器编程---高级I/O函数
管道容量默认大小是65536字节,可以使用fcntl函数来修改管道容量。Socket的基础API中有一个socketpair函数,能够方便的创建双向管道。#include#includeInt socketpair(int domain, int type,int protocol,int fd[2]);Domain只能使用UNIX本地域协议族AF_UNIX,仅能在本地使用这个原创 2015-04-14 11:18:00 · 364 阅读 · 0 评论 -
Linux高性能服务器编程---服务器程序规范
日志Syslog函数应用程序使用syslog函数与rsyslogd守护进程通信。#includeVoid syslog(int priority, const char* message,...);Priority参数是设施值与日志级别的按位或。设施值得默认值是LOG_USER。日志级别:#includeLOG_EMERG 0 系统不可用LOG_ALERT 1原创 2015-04-14 16:09:57 · 358 阅读 · 0 评论 -
链表实现队列-栈
#include#includetypedef int data_t;typedef struct link{data_t data;struct link *next;}link_t;typedef struct {link_t *head;link_t *tail;}link_queue_t;link_queue_t *creat原创 2015-01-23 00:12:35 · 555 阅读 · 0 评论 -
C/C++ Typedef和define的区别
Typedef和define都可以用来给对象取一个别名,但是两者却有着很大不同。1. 首先,二者执行时间不同关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。Define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。 #define用法例子:#define f(x) x*xmain转载 2015-01-21 09:08:28 · 304 阅读 · 0 评论 -
追加面试题
面试题 1:给你三个bool类型变量a, b, c,判断至少有两个为true1. return (a&&b) || (b&&c) || (a&&c);2. int count = 0; if(a) count++; if(b) count++; if(c) count++; return count原创 2015-02-05 13:51:38 · 337 阅读 · 0 评论 -
C语言的谜题
我们可以看到很多C语言相关的一些东西。比如《语言的歧义》主要告诉了大家C语言中你意想不到的错误以及一些歧义上的东西。而《谁说C语言很简单》则通过一些看似你从来不可能写出的代码来告诉大家C语言并不是一件容易事情。《6个变态的hello world》和《如何弄乱C的源代码》则以一种极端的方式告诉大家,不要以为咱们自己写不出混乱的代码,每个程序员其实都有把代码搞得一团乱的潜质。通过这些文章,相信你对编程转载 2015-01-11 19:32:12 · 241 阅读 · 0 评论 -
C语言的歧义
前两天,Neo写了一篇《语言的歧义》其使用C语言讨论了一些语言的歧义。大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西。是的,C语言并不简单,让我们来看看下面这些示例:为什么下面的代码会返回0?(这题应该很简单吧) int x; return x == (1 && x);本题主要是关于C/C++中变量初始化的问题。转载 2015-01-11 18:05:51 · 404 阅读 · 0 评论 -
一个C的序列化库tpl
tpl(http://tpl.sourceforge.net/)是一个开源的小项目,其主要是提供一个可以序列化或反序列化C语言数据的一个API函数库。tpl号称是最有效率的也是最快的,它可以把你内存中的数据存放到文件中,并可以在你需要的时候用文件中反序例化到内存变量中。而且这个函数库没有依赖于别的函数库。下面是一个简单的示例(来源于其主页)把一个数组(“序号”和“人名”)序例化到文转载 2015-01-11 18:41:12 · 1030 阅读 · 0 评论 -
一个fork的面试题
前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下。这个题是这样的:题目:请问下面的程序一共输出多少个“-”?#include #include #include int main(void){ int i; for(i=0; i<2; i++){ fo转载 2015-01-11 16:17:00 · 267 阅读 · 0 评论 -
Linux信号处理统一事件源
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAX_EVENT_NUMBER 1024static int pipefd[2];int se原创 2015-05-20 16:37:35 · 444 阅读 · 0 评论