编程
文章平均质量分 51
Iphone4
linux & web & filesystem & python
展开
-
Centos7程序里面判断系统是否正在关机或者重启(Check if Centos7 is rebooting or shuting down in program.)
程序在OS关机时需要做善后处理,那么就要判断系统是否是在reboot或者关机,Centos6.5可以通过runlevel命令查询到当前运行级别,重启时变为6,关机时变为1. Centos7废弃了runlevel的这一套,那么怎么判断呢?1. 判断方法:当 systemctl list-units --type target 命令同时查询到如下reboot和shutdo原创 2017-01-04 10:36:35 · 2703 阅读 · 0 评论 -
assert、atexit、bsearch、tolower、offsetof及va_list
1.屏蔽assert函数#define NDEBUG ("no debug") //shield the function of assert ... #include #include voidopen_record(char *record_name){ assert(record_name!=NULL); /* Rest o原创 2013-09-23 17:20:40 · 834 阅读 · 0 评论 -
atexit
http://xingyunbaijunwei.blog.163.com/blog/static/76538067201172622626731/exit与atexit 一、exit()函数 函数声明:void exit(int state); exit()函数用于在程序运行的过程中随时结束转载 2013-09-23 16:28:06 · 626 阅读 · 0 评论 -
向产品级代码前进.One
1. 关闭目录!!!! 目录也是文件,系统有同时打开文件数目的限制,如果同时打开太多,后面再想打开,就没门儿了,所以用完文件记得close。2. PATH_BUF_LEN这种宏如果你自己用没问题,给别人用最好用系统定义的宏,比如PATH_MAX, 在中包含了此宏的定义3. 不要用全局变量 replace with static vari原创 2013-09-23 10:02:31 · 1235 阅读 · 0 评论 -
C语言中volatile关键字的作用
http://blog.csdn.net/tigerjibo/article/details/7427366 一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是转载 2013-09-17 14:57:11 · 716 阅读 · 0 评论 -
在结构体中包含自身类型指针时,使用typedef
typedef struct ngx_listening_s ngx_listening_t;struct ngx_listening_s { ngx_socket_t fd; struct sockaddr *sockaddr; socklen_t socklen; /* size of sockaddr原创 2013-09-16 10:49:34 · 3124 阅读 · 0 评论 -
typedef定义函数指针
http://zjf30366.blog.163.com/blog/static/411164582009817101543293/ 有种很方便的写法。typedef int *p;p pointer;这时直接把pointer带入原式中,取代p然后去掉typedef,得到的结果就是int * pointer;哈哈,这样直接替换就很直观多了。C语言语法简单,但内涵却博大精转载 2013-09-16 15:15:36 · 715 阅读 · 0 评论 -
Nginx阅读: typedef定义函数指针类型
/*function point definition*/typedef u_char *(*ngx_log_handler_pt) (ngx_log_t *log, u_char *buf, size_t len);struct ngx_log_s { ngx_uint_t log_level; ngx_open_file_t *fil原创 2013-08-30 11:16:18 · 952 阅读 · 0 评论 -
Nginx主进程切换为后台守护进程
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */#include #include /*spawn a new process and kill parent process, redirect io to /dev/null and run background ...*/n原创 2013-08-22 11:37:22 · 4018 阅读 · 0 评论 -
python比c,有多慢,小测试
#include #include int main (){ int st = time(NULL); long a = 100.33; long b = 23.33; long c; int ct = 1000000000; for (; ct > 0; ct --) c = a/++b; printf("\n total time: %d\n", time(NULL)-st);}xxx原创 2013-11-28 16:03:59 · 3076 阅读 · 1 评论 -
python 信号处理句柄第二个参数的作用
预设信号处理函数signal包的核心是使用signal.signal()函数来预设(register)信号处理函数,如下所示:singnal.signal(signalnum, handler)signalnum为某个信号,handler为该信号的处理函数。我们在信号基础里提到,进程可以无视信号,可以采取默认操作,还可以自定义操作。当handler为signal.SIG_I转载 2014-02-25 20:53:16 · 3386 阅读 · 0 评论 -
在python中执行shell命令,并以字符串形式返回命令执行结果
def run_cmd(cmd): try: import subprocess except ImportError: _, result_f, error_f = os.popen3(cmd) else: process = subprocess.Popen(cmd, shell = True, stdou原创 2014-05-07 17:10:41 · 4953 阅读 · 1 评论 -
Error informing the kernel about modifications to partition
centos7.2 partprobe 执行失败的问题给ceph的osd配置分区的过程中,想通过partprobe命令及时通知kernel去更新分区表,所以用parted命令创建完分区后就执行partprobe命令,在centos7.1上代码跑得666的,但是centos7.2上就发生如下蛋痛的问题:[root@ai126251006028 udev]# part原创 2016-09-07 18:03:43 · 4977 阅读 · 0 评论 -
pip UnicodeDecodeError: 'ascii' codec can't decode byte
在win7上准备安装pylint的,然后准备用pip,pip安装完了,执行pip install pylint, 报了这个错误:UnicodeDecodeError: 'ascii' codec can't decode byte坑死~~ 试了好多办法,http://m.blog.csdn.net/blog/u011515122/17996993 这个情况估计原创 2015-08-28 18:28:23 · 5173 阅读 · 5 评论 -
sizeof() && 数组名和指针
sizeof 函数计算时,对于数组起始地址和指向数组的指针,结果是不同的#include int love(char *p){ printf("sizeof(p) is:%d ", sizeof(p)); return 0;}int main(){ char a[100]; char *l = a; printf("\nsi原创 2013-03-02 11:04:31 · 594 阅读 · 0 评论 -
printf数据类型引发的血案
printf("\nIn %s and line:%s", __func__, __LINE__); 行数__LINE__的数据格式设置错了,然后出来segment fault, 还以为是程序中别的地方的错误,找啊找。。。 找了好久才发现是这个问题原创 2013-02-26 12:04:37 · 562 阅读 · 0 评论 -
udp发送完消息后要关闭端口描述符
int get_osd_oob_list(struct osd_node onode, struct list_head *head){ printf("\nEntering %s ", __func__); char message[4096]; char oob_receive_buf[8192]; int ret, m_type, valid_len; int failure_t原创 2013-03-08 12:01:45 · 1474 阅读 · 0 评论 -
c中预定义 很有用
ANSI C标准中有几个标准预定义宏:__FILE__ __DATE__ __TIME___ __LINE__ 等__LINE__:在源代码中插入当前源代码行号;__FILE__:在源文件中插入当前源文件名;__DATE__:在源文件中插入当前的编译日期__TIME__:在源文件中插入当前编译时间;__STDC__:当要求程序严格遵循A转载 2012-08-29 20:37:15 · 1347 阅读 · 0 评论 -
cmalloc和malloc
http://www.go-gddq.com/html/s689/2012-07/1031757.htm转载 2012-08-18 10:55:57 · 1894 阅读 · 0 评论 -
从ATA层向设备发送TRIM命令
ATA TRIM命令是文件系统用来通知设备哪些逻辑地址不再被占用,可以被设备回收为空闲空间,在ATA命令集中,TRIM命令只是DATAMANAGEMENT SET(DMS)命令的一个子命令,DMS命令是专门用来做设备优化的(The DATA SET MANAGEMENT command provides information for deviceoptimization (e.g., file原创 2012-08-15 17:39:16 · 5127 阅读 · 0 评论 -
~结尾的文件导致程序出错
写个很简单的trace转换工具,需要把几个文件中的时间属性作下偏移,因为多个trace文件之间的时间相隔较久,跑程序时,有个变量,只作值传递,居然在循环处理中发生了值的改变,找不出原因啊,空爹~~~ 后来发现目录下有个和第一个trace文件名一样的~后缀的文件,删除后,程序就正常了。 这个令人费解啊?原创 2012-08-07 17:33:41 · 535 阅读 · 0 评论 -
libata error messages
https://ata.wiki.kernel.org/index.php/Libata_error_messagesLibata error messagesFrom ata WikiJump to: navigation, searchContents[hide]1Overview 2Prefix 3Exc转载 2012-06-14 10:25:44 · 2857 阅读 · 0 评论 -
ISO C90 forbids mixed declarations and code 警告
编译的时候经常会遇到 ISO C90 forbids mixed declarations and code 警告百度了一下,知道是如下原因 : 变量定义之前任何一条非变量定义的语句(注意:语句是会带分号的)都会引起这个警告! 在内核中还需要将 printk的打印放在变量定义之后解决方法: 将非变量的定义移到变量定义转载 2012-04-11 11:57:02 · 788 阅读 · 0 评论 -
打印语句printk数据类型及对应符合
如果变量类型是 , 使用 prink 的格式说明符 : int %d 或者 %x( 注: %d 是十进制, %x 是十六进制 ) unsigned int %u 或者 %x long %ld 或者 %lx unsigned long %lu 或者 %lx long long %lld 或者 %llx unsigned long long %llu转载 2012-04-07 22:59:03 · 2646 阅读 · 0 评论 -
初学编写linux内核模块
http://blog.csdn.net/xiyoukeke/article/details/6366274转载 2012-04-04 15:50:06 · 403 阅读 · 0 评论 -
likely 和 unlikely 的功能就是添加 cache 的命中率,提高系统速度
http://blog.chinaunix.net/uid-11582448-id-1565012.html 咱们不用对 likely 和 unlikely 感到迷惑,须要知晓的就是 if(likely(a>b)) 和 if(a>b) 在功能上是等价的,同样 if(unlikely(a转载 2012-03-26 11:58:34 · 574 阅读 · 0 评论 -
const和指针
type * const variable; //指针的值不可以变const type * variable;type const * variable; //varaible指向的值不可以变#include int main(){ const int n =9; int a[n]; //在c中定义的n是常量,可以这么定义数组 int jane=0, hosfore=1; int原创 2012-09-03 12:26:57 · 366 阅读 · 0 评论 -
GDB的使用
《gdb相关(gdb十分钟教程)》本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友,以及程序爱好者。GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。命令解释转载 2012-09-15 15:01:17 · 584 阅读 · 0 评论 -
fork函数解析
在Linux下产生新的进程的系统调用就是fork函数,这个函数名是英文中“分叉”的意思。为什么取这个名字呢?因为一个进程在运行中,如果使用了fork,就产生了另一个进程,于是进程就“分叉”了,所以这个名字取得很形象。下面就看看如何具体使用fork,这段程序演示了使用fork的基本框架:void main(){ int I; if ( fork() == 0 ) { /* 子进程转载 2013-02-22 20:50:22 · 624 阅读 · 0 评论 -
memcpy惹的祸
struct osd_node{ int osd_no; char osd_address[20];};struct osd_table{ int osd_count; struct osd_node *osd;}; 如上结构体,在程序里先执行了这一句,memcpy(related_osd_table, osdtable.osd原创 2013-03-06 23:07:39 · 660 阅读 · 0 评论 -
linux下链表要初始化
linux下使用链表很频繁,但是不要忘记初始化,否则会有segment fault,如下:struct list_head osd_oobinfo_list[OOBINO_LIST_LEN]; 因为忘记了这个初始化过程:for(i=0; i < OOBINO_LIST_LEN; i++) INIT_LIST_HEAD(&osd_oobinfo_list[i]);偶纠结了好久~~原创 2013-03-03 21:16:09 · 529 阅读 · 0 评论 -
mangix debug --0: scsi连接超时断开
测试大概17分钟的样子,osd、mds和client均未出错,可是测试程序停止执行,在mds和client上执行dmesg如下:fs93:~ # dmesg[ 4052.000006] connection2:0: ping timeout of 5 secs expired, recv timeout 5, last rx 4295902790, last ping 429590404原创 2013-01-18 09:53:41 · 2683 阅读 · 0 评论 -
防止进程在内存耗尽时被OS选择性杀掉
原文: http://blog.chinaunix.net/uid-317451-id-92580.html Linux的内存管理有一套机制:当系统内存溢出的时候,它会选择一个/几个适当的进程杀掉以维持系统的稳定运行。不过机器毕竟是机器,虽然它竭尽全力去选择那些真正是罪魁祸首的进程,但是难免会出错,或者是不公平,到头来系统还是因为误杀而变得残缺不全,甚至不能正常运行。这个时候可能就需要:人转载 2012-12-18 17:55:49 · 1277 阅读 · 0 评论 -
获取本机ip地址
#include #include #include #include #include #include #include int main(){ int inet_sock; struct ifreq ifr; inet_sock = socket(AF_INET, SOCK_DGRAM, 0); char current_osd_ip[20原创 2012-12-11 21:44:28 · 545 阅读 · 0 评论 -
Trace处理小工具
Seer Trace Collection: http://www.lasr.cs.ucla.edu/seer/seer_traces.html----------------------------------------------------------------------------------------------------------------------------原创 2012-12-11 21:52:55 · 692 阅读 · 0 评论 -
在一个字符串中找到第一个只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 分析:这道题是2006年google的一道笔试题。 看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这转载 2012-10-28 23:10:47 · 943 阅读 · 0 评论 -
利用指针的指针来申请内存
内存申请讲解篇: http://blog.csdn.net/wangjiwei2010/article/details/1012018小例子:#include void func(char **p){ *p = malloc(100); strcpy(*p, "this memory is allocated by pointer's pointer...");}int原创 2012-09-24 16:20:33 · 513 阅读 · 0 评论 -
daemon函数的原理及使用详解
http://blog.chinaunix.net/uid-20196318-id-94985.html 在linux系统下创建守护进程的原理及步骤在文章(链接如下)中介绍过。http://blog168.chinaunix.net/space.php?uid=20196318&do=blog&id=28738 其实,linux提供了daemon函数用于创建守护进程,实现原转载 2012-03-24 22:18:16 · 649 阅读 · 0 评论