导航

2012年2月16日

摘要: 线程的栈是线程的私有数据,这部分内容是不共享的。在一个进程内有多个线程,这些线程都有自己的栈,但是又都要挤在进程的虚拟地址空间内。线程之间的栈内存必须保证彼此不冲突线程才能正确地运行。因此,虽然大多数情况下,由系统为用户设置和线程的栈内存,但有些时候还是需要用户亲自对线程进行设置。 线程基本属性中和线程栈有关的属性有三个,分别是线程栈的大小、线程栈的最低地址和线程栈末尾警戒区的大小。 系统默认为一个新建的线程提供PAGESIZE个字节的栈空间,但是很多时候需要更改此值。有时候该线程栈可能会不够用,例如,线程体函数是一个多层递归函数,该函数的特点就是需要多层嵌套栈来保存执行过程,因此,该函数可. 阅读全文

posted @ 2012-02-16 18:46 网名还没想好 阅读(1047) 评论(0) 推荐(0) 编辑

2012年2月15日

摘要: fopen()、fdopen()、close()2010年01月03日 星期日 12:58Linux环境下可以使用下列函数打开一个流,其函数原型如下: #include <stdio.h> FILE * fopen(const char * restrict pathname, const char * restrict type); FILE * fdopen(int filedes, const char *type); fopen函数的第1个参数表示需要打开文件的路径,第2个参数type表示打开的方式,该值以一个字符串的形式传入, type 字串中包含字母a的表示" 阅读全文

posted @ 2012-02-15 14:29 网名还没想好 阅读(4688) 评论(0) 推荐(1) 编辑

摘要: 3.VFSLinux支持各种各样的文件系统格式,如ext2、ext3、reiserfs、FAT、NTFS、iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以mount到某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们用ls命 令看起来是一样的,读写操作用起来也都是一样的,这是怎么做到的呢?Linux内核在各种不同的文件系统格式之上做了一个抽象层,使得文件、目录、读写访 问等概念成为抽象层的概念,因此各种文件系统看起来用起来都一样,这个抽象层称为虚拟文件系统(VFS,Virtual Filesystem)。上一节我们介绍了一 阅读全文

posted @ 2012-02-15 14:19 网名还没想好 阅读(1260) 评论(0) 推荐(0) 编辑

2012年2月13日

摘要: 虚拟内存---linux操作系统采用虚拟内存管理技术,使得每个进程都有独立的进程地址空间,该空间是大小为3G,用户看到和接触的都是虚拟地址,无法看到实际的物理地址。利用这种虚拟地址不但能起到保护操作系统的作用,而且更重要的是用户程序可使用比实际物理内存更大的地址空间。linux将4G的虚拟地址空间划分为两个部分------用户空间和内核空间。用户空间从0----0xbfffffff,内核空间从3G----4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间。例外情况是用户进程通过系统调用访问内核空间。进程空间----用户空间对应进程,所以每当进程切换,用户空间就会跟着变化。每个 阅读全文

posted @ 2012-02-13 20:10 网名还没想好 阅读(1910) 评论(0) 推荐(1) 编辑

摘要: 用printf()输出时是先输出到缓冲区,然后再从缓冲区送到屏幕上。那什么情况下才会将缓冲区里的内容送到屏幕上呢?一,使用fflush(stdout)强制刷新。二,缓冲区已满。三,scanf()要在缓冲区里取数据时会先将缓冲区刷新。四,\n,\r进入缓冲区时。五,线程结束的时候,如果该线程里也有printf(....);六,程序结束时。#include<stdio.h>#include<stdlib.h>int main(){int i=89;int x;printf("--------------\n");//输出-----------后不会立即输 阅读全文

posted @ 2012-02-13 13:56 网名还没想好 阅读(2912) 评论(0) 推荐(0) 编辑

2012年2月12日

摘要: 在具体介绍这几个结构以前,我们需要解释一下文件描述符、打开的文件描述、系统打开文件表、用户打开文件表的概念以及它们的联系。1.文件对象在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数。Linux中规定每个进程能最多能同时使用NR_OPEN个文件描述符,这个值在fs.h中定义,为1024*1024(2.0版中仅定义为256)。每个文件都有一个32位的数字来表示下一个读写的字节位置,这个数字叫做文件位置。每次打开一个文件,除非明确要求,否则文件位置都被置为0,即文件的开始处,此后的读或写操作都将从文件的开始处执行 阅读全文

posted @ 2012-02-12 15:43 网名还没想好 阅读(253) 评论(0) 推荐(0) 编辑

2012年2月11日

摘要: 一般来说,Posix的线程终止有两种情况:正常终止和非正常终止。线程主动调用pthread_exit()或者从线程函数中return都将使线程正 常退出,这是可预见的退出方式;非正常终止是线程在其他线程的干预下,或者由于自身运行出错(比如访问非法地址)而退出,这种退出方式是不可预见的。不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺利的释放掉自己所占用的资源,特别是锁资源,就是一个必须考虑解决的问题。最经常出现的情形是资源独占锁的使用:线程为了访问临界资源而为其加上锁,但在访问过程中被外界取消,如果线程处于响应取消状态,且采用 阅读全文

posted @ 2012-02-11 14:47 网名还没想好 阅读(381) 评论(0) 推荐(0) 编辑

摘要: 面向对象语言C++的基本特征是封装、继承、多态,其实这些用C语言同样可以实现。封装可以用结构体来实现,继承可以用包含来实现,这些都好说,下面我用代码重点说一下如何用C语言实现C++的多态。using namespace std;typedef struct Animal{void (*show) ();}CAnimal;void showpig(){cout<<__FUNCTION__<<endl;}void showbird(){cout<<__FUNCTION__<<endl;}void showdog(){cout<<__FUN 阅读全文

posted @ 2012-02-11 14:14 网名还没想好 阅读(891) 评论(0) 推荐(0) 编辑

2012年2月10日

摘要: 信号量及信号量上的操作是E.W.Dijkstra 在1965年提出的一种解决同步、互斥问题的较通用的方法,并在很多操作系统中得以实现, Linux改进并实现了这种机制。信号量(semaphore )实际是一个整数,它的值由多个进程进行测试(test)和设置(set)。就每个进程所关心的测试和设置操作而言,这两个操作是不可中断的,或称“原子”操作,即一旦开始直到两个操作全部完成。测试和设置操作的结果是:信号量的当前值和设置值相加,其和或者是正或者为负。根据测试和设置操作的结果,一个进程可能必须睡眠,直到有另一个进程改变信号量的值。信号量可用来实现所谓的“临界区”的互斥使用,临界区指同一时刻只能有 阅读全文

posted @ 2012-02-10 22:25 网名还没想好 阅读(3809) 评论(0) 推荐(3) 编辑

2012年2月9日

摘要: 我虽不是经济学专业,但是翻开任何一本经济学的教材,或者直接翻开wikipedia的economics条目,都会看到物以稀为贵这条铁律。人才作为资源的一种,也是同样的道理。而稀缺性,换种说法也可以叫做不可替代性。一种资源越是稀缺,不可替代性就越强。再加上如果这种资源是一种具有实实在在使用价值的东西(而不是荷兰的郁金香泡沫),那么其价格就会越高。问题是,如何构筑你的个人知识体系,使得你的知识技能集尽可能成为不可替代的呢?孟岩先生曾发表了一篇博客《技术路线的选择重要但不具有决定性》[1],用有说服力的数据阐述了技术路线的选择对于个人知识体系的不可替代性并非一个关键因素,文中也提到了这样一段话:那么核 阅读全文

posted @ 2012-02-09 21:25 网名还没想好 阅读(280) 评论(0) 推荐(0) 编辑