首页 › 月度存档 › 8 月 2014

分页机制

段机制实现虚拟地址到线性地址的转换,然而,linux有意的将linux的所有段基址设为0,所以在linux中,线性地址与虚拟地址是相同的,我们以后讨论中,也不对虚拟地址和线性地址进行区分。我们着重学习分页机制,分页机制实现线性地址到物理地址的转换。
继续阅读 »

fork()带来的疑惑

由fork()带来的疑惑促成了我的linux内核之旅
fork()可以创建新进程,新进程是父进程的一个拷贝,这是大家都知道的.
fork()有一些有趣的特点:
继续阅读 »

fork的那些事

历史上的linux 在fork()时完整的复制了父进程的进程空间及相应物理页面,这带来的消耗是可观的,更糟的是,往往程序猿fork()之后紧接着就exec()执行新的程序,刚才复制的东西全白复制了。
为避免做这种无用功,可以使用vfork函数创建,子进程会完全共享父进程的地址空间,包括页表。所以进程写入用户空间的内容同时也写入了子进程的 用户空间,反之亦然。为了避免产生”混乱“,内核将父进程挂起,直到两个进程不再共享它们的用户空间(子进程调用了exec()或exit())。

继续阅读 »

linux下宽字符串与多字节字符串之间的转换

最近写linux下的字幕下载软件时,遇到了中文宽字串和多字节串之间的转换问题,这问题困扰了我不久呀,现在终于开窍了。。。
我们知道(请看《Unicode、UTF-8、多字节字符、宽字符》):多字节字符串”你好\n”在源文件以及目标文件中,都是utf-8编码,一个英文字符1字节,一个汉字3字节。因为strlen是根据一字节一字符来计算字符个数的,所以strlen无法处理多字节字符串。
宽字符L”你好\n”在源文件中是utf-8编码,但在目标文件中是UCS编码的,一个字符占4字节。wstrlen便是依据每4字节为一字符,计算有多少字符。
继续阅读 »

Unicode、UTF-8、多字节字符、宽字符

Unicode、UTF-8
为了统一全世界各国语言文字的编码,ISO 制定
了ISO 10646 标准,也称为UCS(Universal Character Set)。UCS编码的长度是31位,可以表示2^31个字符。同时,另一组织制定了Unicode编码。后来ISO与这个组织联手统一了编码。所以Unicode与UCS是一样的。
有了字符编码,另一个问题就是这样的编码在计算机中怎么表示。现在最广泛用的是UTF-8,UTF是Unicode Transformation Format的缩写。UTF-8具有一下特点:
继续阅读 »

用golang启动一个daemon

用golang启动一个daemon
继续阅读 »

linux下telnet server的C实现

linux下telnet server的C实现
继续阅读 »

Linux C 编写的简易FTP程序

Linux C 编写的简易FTP程序

继续阅读 »

Linux C socket 常用函数和结构体

Linux C socket 常用函数和结构体

继续阅读 »

linux下socket编程之远程备份服务器

分别采用TCP或UDP协议编写一个远程数据备份服务器,运行客户端将本地文件备份到远程的服务器中。
服务器的功能:接受客户端请求,把客户端的文件进行备份(可以备份到指定的文件夹)。
客户端的功能:与远程服务器进行连接,在连接后把本地的文件发送给远程备份服务器。
继续阅读 »