摘要: 首先,先稍微了解系统调用的概念: 系统调用,英文名system call,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序,及别的功能,这些函数集合起来就叫做程序接口或应用编程接口(Application Programming Interface,API),我们要在这个系统上编写各种应用程序,就是通过这个API接口来调用系统内核里面的函数。如果没有系统调用,那么应用程序就失去内核的支持。 现在,再聊不带缓存的I/O操作: 阅读全文
posted @ 2011-10-19 11:28 wait123 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 这两天在看APUE的进程环境这章,看着看着就觉得自己对可执行文件在内存中的分配理解的一点也不清楚,花了很长时间终于弄明白了,下面我依次说说跟这些有关的内容。C语言进程在运行时,可以分成几个段,这些段从低地址到高地址分别是正文段,初始化数据段、非初始化数据段(bss),栈以及堆。可以在一个可执行文件上运行size命令看到各个段的情况。其中程序的局部变量时存在栈里的,经过初始化的全局和静态变量是存在初始化数据段,bss段存储非初始化的全局变量,然后有一个问题出来了,我们经常看到说不能返回指向局部变量的指针,结果我在程序里验证后发现没有问题,程序如下:int*fun();main(){int*p;p 阅读全文
posted @ 2011-10-17 15:29 wait123 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 这两天又回头看了看python中的赋值、浅拷贝和深拷贝,以前看的时候总觉得他们之间有关系,但又理不清楚,今天总算有了点头绪,所以跟大家分享一下我的理解。先说说赋值,其实python中的赋值其实是赋值了一个引用,例如:foo1=1.0foo2=foo1用操作符is判断时,你可以发现结果是true,是因为python是先创建了一个对象1.0,然后这个对象的引用又被赋值给了foo1和foo2,但是如果是这样:foo1=1.0foo2=1.0这时你会发现,这其实是创建了两个不同的对象,用内建函数id()可以发现,二者的身份不同;其实python还有一个特例,例如:a=1b=1你会发现id(a)=id( 阅读全文
posted @ 2011-10-10 21:14 wait123 阅读(9547) 评论(0) 推荐(1) 编辑
摘要: 昨天学习了python的静态嵌套域,但是网上差了很多资料看了很多博客,也没有弄清除,最后还是得看PEP227.在PEP227中原文是这样说的:The Python 2.0 definition specifies exactly three namespaces to check for each name -- the local namespace, the global namespace, and the builtin namespace. According to this definition,if a function A is defined within a functi. 阅读全文
posted @ 2011-09-14 11:04 wait123 阅读(4868) 评论(0) 推荐(0) 编辑
摘要: 愿为地址:http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html今天来讨论一下装饰器。装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。1. 装饰器入门1.1. 需求是怎么来的?装饰器的定义很是抽象,我们来看一个小例子。view sourceprint?1def foo():2print 'in foo() 阅读全文
posted @ 2011-09-06 14:15 wait123 阅读(203) 评论(0) 推荐(0) 编辑