|
用户名:larryzhu 笔名:朱之光 地区: 上海 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
记录人生点点滴滴
关闭linux终端和VI的喇叭声(转)
计算机中的回车换行(CRLF)详解
计算机中的回车换行(CRLF)详解
作者:朱之光
编过C程序的人都知道\n是换行符。在字符串中插入\n,就可以多行打印在屏幕上。如:printf(“hello\nWorld\n”);
可是为什么要叫做“回车换行”?
起源
首先要从打字机说起,打字机当前行打满后,要到下一行起始处开始打字需要两个步骤。
第一步,将纸卷从最右边推到最左边,这个叫回车(Carriage Return,缩写为CR);
第二步,将纸卷下卷一行,这个叫换行(Linefeed,缩写为LF)。
为什么要分成回车换行两步?为什么打字机不设计成一步完成?
因为打字机不像计算机,打错后删除字符就可以。一旦打错就是白纸黑字改不了。只能将纸卷推回到打错的地方打上一个错误标记,再在后面接着打正确的。而在有些情况下,为了打出一些特殊的格式,打字员还会只换行不回车。比如:打一斜列的’*’。
回车换行符在ASCII码表中对应0x0A和0x0D两个数字。对应C语言转义字符为’\r’,’\n’。在编写计算机程序中很多人会用一个换行(LF)代替整个回车换行操作。也就是’\n’。这个要求计算机的显示系统能够正确处理并显示,显示的结果要根据不同的操作系统/软件环境来决定。
打印到控制台最好把'\r\n'写全。如果是要保存到文件,请看下面的“不同平台下的文本文件”章节。
回车还有用吗?
做一个试验:printf(“1111\r222”); => 输出结果为:2221,因为其中有一个回车符,将光标移动到了屏幕最左端。使得222覆盖了前面的111。最后一个1因没有被覆盖而被保留下来。
不同平台下的文本文件
Unix中的文本文件以一个换行符(\n)作为每一行结束的标记;
MS-DOS/Windows中的文本文件以一个回车加换行(\r\n)作为每一行结束的标记;
Macintosh中的文本文件以一个回车符(\r)作为每一行结束的标记。
Joomla 去除 Category 中的文章过滤列表
成员模版函数 Member template function
Staged Event Driven Architecture (SEDA) 介绍
Emacs 基本概念和基本命令
Emacs 基本概念和基本命令
作者:朱之光
Emacs有两个最重要的概念:Buffer和Window。
Buffer表示一份数据。可以是文件加载到内存后形成,也可以是一个尚未命名的草稿;(类似MFC中的CDocument)
Window是显示Buffer的界面区,同时也是用户编辑Buffer的界面。整个Emacs界面就是由多个Window组成。(类似MFC中的View)
Emacs可以同时打开多个Buffer,用户可以自己确定哪些Buffer显示/隐藏。一个Window同一时间只能显示一个Buffer,但一个Buffer可以同时显示在多个Window上。(类似MFC中的多文档/多视图)
如下图所示:

Emacs提供了丰富的命令来进行相关操作。
Buffer commands:
C-x C-f Find file
C-x C-s Save file
C-x k Close file
C-x s Save some buffers
C-x C-b List buffers
C-x b Switch buffer
Editing commands:
C-x u Undo
C-_ Undo
C-s forward search
C-r reverse search
M-x replace-string/replace-regexp
replace string/regexp
M-% replace while searching
Window commands:
C-x o Switch between windows
C-x 1 Delete all but one window
C-x 2 HSplit current window into 2 windows
C-x 3 VSplit current window into 2 windows
System commands:
C-x C-c Quit Emacs
Vim编辑器配合ctags实现函数原型快速定位介绍 (摘)
Vim编辑器配合ctags实现函数原型快速定位介绍 (摘)
找一个源码目录,在终端上运行如下命令,会生成一个tags文件。
ctags -R
然后打开vi,输入类似如下的指令,tags=后面为刚才生成的tags文件的全路径名。
:set tags=/Your/Path/To/tags
或者 vim -t /Your/Path/To/tags
然后就可以尝试跳转了。如果是经常使用的工程,将上面的set一行写在你的.vimrc文件里即可。
查阅标识符原型:
光标移动到标识符上,按下Ctrl-]键。Vim会打开原型声明所在的文件,并定位到具体的行列。
Ctrl-t键,Vim将跳回刚才的位置。
g]键(先按g再按]):如果有同名的多个tag,可以用这两个键进行跳转,会提示选择序号。
vi 替换命令用法详解 (转)
vi 替换命令用法详解 (转)
转自:http://www.domsn.net/exurl.php/reply/641.html
格式
:[range]s/[pattern1]/[pattern2]/[g]
说明:
1、range 是命令执行范围的指定,可以使用百分号(%)表示所有行,使用点(.)表示当前行,使用美元符号($)表示最后一行。你还可以使用行号,例如10,20表 示第10到20行,.,$表示当前行到最后一行,.+2,$-5表示当前行后两行直到全文的倒数第五行,等等。
2、s 表示其后是一个替换命令。
3、pattern1 这是要查找的一个正则表达式,这篇文章中有一大堆例子。
4、pattern2 这是希望把匹配串变成的模式的正则表达式,这篇文章中有一大堆例子。
5、g 可选标志,带这个标志表示替换将针对行中每个匹配的串进行,否则则只替换行中第一个匹配串。
apt-get 介绍
apt的镜像源存放在/etc/apt/sources.list中。可以根据所在地区网络情况对文件进行修改。
http://ubuntu.cn99.com/ubuntu/对于中国地区速度非常理想。
apt-get命令介绍
apt-get update
更新同步本地package数据库。(每次修改/etc/apt/sources.list后需要执行)
apt-get clean && apt-get autoclean
清除本地package缓存
apt-get upgrade
尝试更新本地已经安装的所有package
apt-get dist-upgrade
更新整个发布版本到另外一个版本
apt-get dselect-upgrade
dselect更新
apt-get install mozilla-firefox
安装package
apt-get remove mozilla-firefox
删除package
apt-get --purge remove mozilla-firefox
删除package,包括所有配置文件
apt-get source mozilla-firefox
获取源码
apt-get build-dep mozilla-firefox
更新源码包依赖的源码
OpenSSL 编译
OpenSSL 编译
作者:朱之光
步骤:
1、安装Perl;
2、下载OpenSSL并解压到e:\work\openssl;
3、启动VS command prompt控制台;
4、cd e:\work\openssl
5、perl Configure VC-WIN32 --prefix=d:\openssl
6、ms\do_ms.bat
7、修改ms\nt.mak和ms\ntdll.mak
去掉CFLAG定义中的/WX。(/WX表示treat warning as error,该开关会导致openssl无法编译)
8、执行编译
nmake -f ms\nt.mak install <-- Static Library
make -f ms\ntdll.mak install <-- Dynamic Library
注意:
如果跳过第7步,会导致编译错误。如下:
.\crypto\cversion.c(105) : error C2220: warning treated as error - no 'object' file generated
.Net Framework自带的微型WebServer
.Net Framework自带的微型WebServer
在调试Asp.net网站程序的时候VS会启动一个WebServer协助调试,而不需要使用IIS。
这个WebServer就是随同.Net Framework一起发布的WebDev.WebServer。下面是其使用方法。
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\WebDev.WebServer.EXE /port:1091 /path:"
这个WebServer甚至可以随同你自己的应用程序一起发布:)。
使用限制:
WebDev.WebServer.exe仅接受本机访问。
Singleton -- fully lazy instantiation
Singleton -- fully lazy instantiation
public sealed class Singleton { Singleton() { } public static Singleton Instance { get { return Nested.instance; } } class Nested { // Explicit static constructor to tell C# compiler // not to mark type as beforefieldinit static Nested() { } internal static readonly Singleton instance = new Singleton(); } } |
OpenMP 介绍
OpenMP 介绍
作者:朱之光 (larry1zhu@gmail.com)
1、 简介
2、 Hello world!
3、 循环优化
4、 其他
5、 参考网址
简介
OpenMP是一种面向共享内存以及分布式共享内存的多处理器多线程并行编程接口。
由SGI发起。官方网站www.openmp.org
Microsoft VC++ 从版本2005起加入了OpenMP支持。使得我们可以很轻易的写出并行运算的程序。
先看一个简单例子(Hello world!)
1、 创建一个简单的Windows Console工程;

2、 启用OpenMP支持
工程属性->C/C++->Language->OpenMP Support: Yes

3、 编写如下代码
4、 执行结果

5、 调整并行执行数量
设置环境变量:OMP_NUM_THREADS=10
(设置10个并行执行线程,也可以在程序内部调用omp_set_threads_num(10);实现。)

6、 再执行一次
下面对程序进一步说明。
1、 OpenMP需要包含omp.h,启用OpenMP支持后,编译器会自动引用vcomp.lib
2、 #pragma omp parallel是一个编译器指引,指导编译器生成相应代码;
3、 #pragma omp parallel
#pragma omp parallel
{
//此处的程序块会被多个线程并行执行
}
4、 进入程序块后OpenMP库代码会被执行,最终产生OMP_NUM_THREADS个工作程,并行执行程序块中的代码;
5、 只有所有线程都执行完后才会结束程序块,执行后面的代码。后面的代码将是单线程执行;
循环优化
循环优化是并行计算中的重要课题。OpenMP对循环优化提供了部分支持。
参看如下代码:

由于程序设置了并行线程数量为3,所以0-100的循环会被分割为三个部分:0-33,34-66,67-100。分别由三个线程并发执行。
结果如下:

其他
并行计算和多线程编程一样,主要需要考虑两个问题:数据访问的互斥和线程间的同步。
OpenMP对此提供了相应的支持。请参考文后提供的网址。
参考网址
http://msdn.microsoft.com/en-us/library/tt15eb9t.aspx