代码改变世界

随笔档案-2009年10月

APUE学习笔记(20)-文件记录锁

2009-10-27 11:18 by htc开发, 222 阅读, 收藏,
摘要: 写在前面1. 本文内容对应《UNIX环境高级编程》(第2版)》第14章。2. 总结了文件记录锁的基本概念和使用方法。3. 希望本文对您有所帮助,也欢迎您给我提意见和建议。记录锁记录锁(record locking)的功能是:锁定文件中的一个区域(也可能是整个文件),使得当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区。其互斥规则与读写锁相同。POSIX.1标准使用fcntl函数作为记录锁的接口。#include <fcntl.h>int fcntl(int filedes, int cmd, ... /* struct flock *flockptr */ 阅读全文

APUE学习笔记(21)-IO多路转接

2009-10-27 11:18 by htc开发, 229 阅读, 收藏,
摘要: 写在前面1. 本文内容对应《UNIX环境高级编程》(第2版)》第14章。2. 总结了IO多路转接的概念,以及select、pselect和poll函数的用法。3. 希望本文对您有所帮助,也欢迎您给我提意见和建议。IO 多路转接当从一个文件描述符读,然后写到另一个文件描述符,可以在下列形式的循环中使用阻塞IO。while ((n = read(STDIN_FILENO, buf, BUFSIZ)) > 0) if (write(STDOUT_FILENO, buf, n) != n) err_sys("write error");但是,如果必须从两个描述符读,那么就可能 阅读全文

APUE学习笔记(15)-线程同步

2009-10-27 11:16 by htc开发, 121 阅读, 收藏,
摘要: 写在前面1. 本文内容对应《UNIX环境高级编程》(第2版)》第11章。2. 总结了线程同步的三种方法:互斥量、读写锁以及条件变量。3. 希望本文对您有所帮助,也欢迎您给我提意见和建议。线程同步是一个老话题了。当多个控制线程共享相同的内存时,需要确保每个线程看到一致的数据视图。APUE介绍的线程同步方式有:互斥量互斥量(mutex)从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。互斥变量用pthread_mutex_t数据类型来表示,在使用前必须对其进行初始化。对于静态分配的互斥量,可以把它设置为常量PTHREAD_MUTEX_INITIALIZER。如果动 阅读全文

APUE学习笔记(9)-进程关系

2009-10-27 11:14 by htc开发, 193 阅读, 收藏,
摘要: 写在前面1. 本文内容对应《UNIX环境高级编程》(第2版)》第9章。2. 总结了关于进程关系和作业控制的一些概念。3. 希望本文对您有所帮助,也欢迎您给我提意见和建议。l 可以用ps -o pid,ppid,pgrp,session,tpgid,comm命令,显示进程ID,父进程ID,进程组ID,会话ID,前台进程组ID和命令。l 每个进程除了有一个进程ID之外,还属于一个进程组。进程可以通过调用setpgid加入一个现有的组或者创建一个新进程组。l 每个进程组有一个组长进程,其标识是:进程组ID等于其进程ID。只要组中有一个进程存在,则该进程组就存在,这与组长进程是否终止无关。从进程组创建 阅读全文

APUE学习笔记(8)-执行程序

2009-10-27 11:13 by htc开发, 159 阅读, 收藏,
摘要: 写在前面1. 本文内容对应《UNIX环境高级编程》(第2版)》第8章。2. 总结了如何使用exec函数族为新创建的进程执行程序。3. 希望本文对您有所帮助,也欢迎您给我提意见和建议。execfork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程执行的程序完全替换为新程序,包括进程的正文、数据、堆和栈,而新程序则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。在执行exec前后实际用户ID和实际组ID也保持不变,但有效ID是否改变取决于所执行程序文件的设置用户ID位和设置组ID位是否设置。 有6种不同 阅读全文

APUE学习笔记(6)-创建进程

2009-10-27 11:12 by htc开发, 120 阅读, 收藏,
摘要: 写在前面1. 本文内容对应《UNIX环境高级编程》(第2版)》第8章。2. 总结了如何使用fork函数创建进程,以及父子进程间的一些关系。3. 希望本文对您有所帮助,也欢迎您给我提意见和建议。fork一个现有进程可以调用fork函数创建一个新进程。fork函数被调用一次,但返回两次。两次返回的唯一区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程ID。原因在于,一个进程可以有多个子进程,并且没有一个函数可以获得所有子进程的进程ID;而一个进程只会有一个父进程,并且总能使用getppid获得其父进程的ID。如果系统中已经有太多的进程或者该实际用户ID的进程总数超过了系统限制(CHILD 阅读全文

APUE学习笔记(7)-僵死进程

2009-10-27 11:12 by htc开发, 165 阅读, 收藏,
摘要: 写在前面1. 本文内容对应《UNIX环境高级编程》(第2版)》第8章。2. 总结了进程终止方式和僵死进程的概念,以及使用wait函数获取子进程的终止状态。3. 希望本文对您有所帮助,也欢迎您给我提意见和建议。进程终止方式进程有5种正常终止方式:l 在main函数内执行return语句。l 调用exit函数。此函数由ISO C定义,其操作包括调用各终止处理程序(用atexit函数注册),然后关闭所有标准IO流等。l 调用_exit或_Exit函数,并不运行终止处理程序和信号处理程序。l 进程的最后一个线程在其启动例程中执行返回语句。但是,该线程的返回值不会用作进程的返回值,进程以终止状态0返回。 阅读全文

APUE学习笔记(5)-设置用户ID

2009-10-27 11:11 by htc开发, 155 阅读, 收藏,
摘要: 写在前面1. 本文内容对应《UNIX环境高级编程》(第2版)》第4章。2. 总结了用户ID和文件访问权限检查的概念,以及设置用户ID的用法。3. 希望本文对您有所帮助,也欢迎您给我提意见和建议。用户ID一个进程与两类ID相关:l 实际用户ID和实际组ID,用于标识用户究竟是谁。这两个字段在登录时取自口令文件中的登录项。可以使用getuid和getgid函数查询。l 有效用户ID和有效组ID,与附加组ID一起,用于文件访问权限检查。可以使用geteuid和getegid函数查询。通常,等于实际用户ID和实际组ID。一个文件仅将其所有者ID和所有组ID记录在stat结构的st_uid和st_gid 阅读全文

APUE学习笔记(4)-文件共享

2009-10-27 11:10 by htc开发, 156 阅读, 收藏,
摘要: 写在前面1. 本文内容对应《UNIX环境高级编程》(第2版)》第3章。2. 主要总结了UNIX系统下描述文件的三种数据结构,以及文件共享的相关概念。3. 希望本文对您有所帮助,也欢迎您给我提意见和建议。文件数据结构表示文件的数据结构有三个:l v节点结构,包含a)文件类型b)对此文件进行各种操作的函数的指针c)文件的i节点(索引节点)。i节点包含文件的所有者,文件长度,文件所在的设备,指向文件实际数据块在磁盘上所在位置的指针等等。Linux没有使用v节点,而是使用了通用i节点结构。l 文件表项,内核为所有打开文件维持一张文件表,每个文件表项包含a)文件状态标志(读,写,添加,同步和非阻塞等)b 阅读全文

APUE学习笔记(3)-时间概念

2009-10-27 11:09 by htc开发, 146 阅读, 收藏,
摘要: 写在前面1. 本文内容对应《UNIX环境高级编程》(第2版)》第1、6、8章。2. 总结了UNIX系统下的两种时间概念。3. 希望本文对您有所帮助,也欢迎您给我提意见和建议。UNIX系统一直使用两种不同的时间概念:日历时间和进程时间。日历时间保存日历时间的数据类型有三种:l time_t:记录自国际标准时间公元1970年1月1日00:00:00以来经历的秒数。通过time函数返回。文件属性中的最后访问时间,最后修改时间和最后文件属性更改时间,都使用该类型记录。#include <time.h>time_t time(time_t *calptr);l timeval:通过getti 阅读全文

APUE学习笔记(1)-errno变量

2009-10-27 11:08 by htc开发, 239 阅读, 收藏,
摘要: 写在前面1. 本文内容对应《UNIX环境高级编程》(第2版)》第1章。2. 主要介绍errno变量的使用,包括如何打印出错消息,以及多线程下的errno变量。3. 希望本文对您有所帮助,也欢迎您给我提意见和建议。errno变量当函数出错时,常常返回一个负值(-1),而且整型变量errno通常被设置为含有附加信息的一个值。例如,open函数如果成功执行则返回一个非负的文件描述符,如果出错则返回-1。在open出错时,有大约15种不同的errno值(如文件不存在,权限问题等)。变量errno定义在文件<errno.h>中。在linux下,可以赋予它的各种常量在<asm-gener 阅读全文

APUE学习笔记(1)-限制查询

2009-10-27 11:05 by htc开发, 166 阅读, 收藏,
摘要: 写在前面1. 学习linux环境下的编程,《UNIX环境高级编程》(行话叫APUE)应该是必读的一本书。毫无疑问,APUE可以作为API的参考手册。但是,个人认为书中的许多概念和思想仍然需要细细揣摩。细节的积累,一来是良好模式设计的基础,二来为学习内核知识提供了上层视角。读书笔记的目的正在于此,而linux开放、自由的思想始终是一种原动力。2. APUE.2e及其源码可以从这里下载。源码在linux下的编译需要做几处修改,可以参考《在Linux下编译APUE的例子》。我使用的系统是Ubuntu 9.04(linux-2.6.29.3,gcc-4.3.3)。3. 关于Makefile和GDB的使 阅读全文

IPC消息队列使用详细分析

2009-10-26 20:35 by htc开发, 268 阅读, 收藏,
摘要: 虽然说是进程间通信中有关消息队列的一个比较详细的分析 同样的,共享内存,信号量和消息队列的公共部分知识也都同理 首先:使用XSI IPC需要首先了解标识符和键的概念 标识符是标识IPC对象的一个量,通常由一个int型变量表示,不过标识符只是IPC对象的内部名,如果要使的多个进程能够使用同一个IPC,需要得到一个外部名,这个外部名就是键--KEY,每个IPC对象都与一个键相关联 对于消息队列:可以通过函数magget通过一个键获得他的标识符,即通过外部标识得到内部标识的一个方法 例如:我们知道一个消息队列的键是msg_key; 那么:可以通过下列代码段 int msg_id; nsg_id=m. 阅读全文

sinal函数原型的分析

2009-10-19 15:46 by htc开发, 207 阅读, 收藏,
摘要: void (*signal (int signo, void (*func)(int))) (int);乍一看,还以为定义了一个函数指针signal,但如果真是这样,signal后的参数列表又怎么解释?先来看看一些基础知识:1,定义函数指针:return_type (*func_pointer)(parameter_list)2,定义返回函数指针的函数:return_type(*function(func_parameter_list))(parameter_list)定义了一个函数function,该函数的参数列表是(function_patameter_list),返回类型是一个函数指针, 阅读全文

项目管理课程札记(2009.10.17)

2009-10-19 15:39 by htc开发, 156 阅读, 收藏,
摘要: 项目管理课程札记(2009.10.17)由于公司的项目很紧,需要长期出差在外,开学以来一直没上过课。上个周六,终于见到张艳红老师了,高贵,典雅,而又不失时尚,风华绝代,仿佛集现代美与古典美于一身。这是张老师给我的第一印象。当时已经是午后了,张老师刚上完上午的课,还没来得及吃饭,却仍然耐心的听着学生和他探讨管理问题。看到学生成长,能独当一面了,张老师总是露出欣慰的笑容,仿佛看着自己的孩子一样。我不禁为之一震。张老师上课的第一句话就是,一个月没“折磨”我们了,接下来要开始“折磨”我们了。的确,在温室成长的花草,是经不起外面暴风骤雨的。我们需要认清的是,现实社会的残酷和不可预知性。而我们一定要考虑到 阅读全文

激光打印机的原理、碳粉分类

2009-10-16 19:49 by htc开发, 1365 阅读, 收藏,
摘要: 第一篇激光打印机工作原理 激光打印原理:以HP(反转显影方式)为例,激光头以激光束方式将应该成像的照射在OPC上(OPC本身绝缘,表面已经充上负电,打印机给其内部一个正电背压),使OPC该上粉的位置电阻降低,表面负电荷消失,形成所谓的静电潜像。这样,墨粉本身带负电,与OPC内部正电异性相吸,转移到OPC上(当然,这里不仅仅是这一个力,还有磁力、偏压力、分子力等等。而不该有粉的地方,因为OPC表面仍然是带有负电荷,同性相斥)。 打印机内部有一个转印辊,带有更强大的正电荷,把OPC上的墨粉抢(转移)到纸(或其他介质)上,纸(或其他介质)在经过打印机的定影系统时,通过上面加热,下面加压的方式热融.. 阅读全文

C/C+语言struct深层探索 (转)

2009-10-16 17:38 by htc开发, 202 阅读, 收藏,
摘要: C/C+语言struct深层探索 作者:宋宝华 出处:PConline 1. struct的巨大作用 面对一个人的大型C/C++程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C++程序,势必要涉及一些(甚至大量)进行数据组合的结构体,这些结构体可以将原本意义属于一个整体的数据组合在一起。从某种程度上来说,会不会用struct,怎样用 struct是区别一个开发人员是否具备丰富开发经历的标志。 在网络协议、通信控制、嵌入式系统的C/C++编程中,我们经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整... 阅读全文

Source Insight完美转换UTF-8 到 GB2312

2009-10-14 16:38 by htc开发, 761 阅读, 收藏,
摘要: Source Insight完美转换UTF-8 到 GB2312文/蒹葭前言很多人用source insight 打开某些源码文件时,汉字显示为一堆乱码。这个问题是因为编码方式不同。记事本和一些编辑器默认编码方式是ANSI,在这种方式下输入汉字,其实就是GB系列的编码方式。不幸的是,广收欢迎的代码查看工具Source insight 虽然支持汉字,但是它不支持UTF-8。笔者感到疑惑的是,当初开发source insight的这帮人现在哪里去了?为何不继续开发?这么好的工具,却不再更新了,实在让人可惜。可惜归可惜,程序还是要看。乱码怎么办?很多人用笨方法,用记事本打开源代码,再另存为ANSI格 阅读全文

ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS的区别和由来。

2009-10-14 15:30 by htc开发, 183 阅读, 收藏,
摘要: 科普一下,自己也学习一下~~~~~ 一直对字符的各种编码方式懵懵懂懂,什么ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们。Let's go! 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。 再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为"计算机"。 开始计算 阅读全文

XXX项目鉴定总结!

2009-10-12 21:46 by htc开发, 170 阅读, 收藏,
摘要: XXX项目已经进入鉴定阶段,由权威的“鉴定机构”来执行。只有通过鉴定了,我们的产品才能定型,生产。 在鉴定过程中,发现了一些问题,现罗列出来,以供今后参考。 功能过于复杂。在现场发现很多功能太细化,有重复嫌疑。用户只需要实现他所想要的,而对不同模式,不同细节无过高要求。大而全并不一定是好事,它延长了开发时间,增加了软件耦合度,降低了软件运行的稳定性。对这个项目而言,在工期紧,任务重的情况下,我们应提倡小而精,努力做好收集用户需求的工作;当然,也可以采用敏捷开发,先提交满足用户基本功能的版本,如果有需要,再根据用户要求进行功能添加,从而避免做许多无用功。 UI设计没有最大限度考虑易用性。鉴定机. 阅读全文