最后更新于 .

最近项目小组在去除代码中的warning,在修正代码的过程中看到了对结构体不正确的初始化方式:
假设有一个如下的struct定义:

struct astruct
{
    int a;
    int b;
};
struct astruct test = {0};

即使astruct中都是基础类型的成员这样的初始化话也是不正确的。
这种初始化仅仅是把a变量设置为了0,而未对b变量做初始化。
产生这样错误的原因,大概是收到数组初始化的影响。数组是可以这么初始化话的,而且初始化的值只能是0!
对结构体的初始化,可以有一下三种。

struct test
{
    int a;
    int b;
};
int main()
{
    struct test t1 = {0, 0}; 
    struct test t2 = { 
        .a=2, 
        .b=3
    };  
    struct test t3 = { 
        a:12345,
        b:567890
    };  
    printf("t1.a = %d, t1.b ...

最后更新于 .

前段时间无聊的找出了尘封许久的ipod shuffle,听了n多遍所有的歌之后终于忍不住想要来次大换血,但是又不想用iTunes(你总不能逼我在家里装一次,到公司再重注册一次吧……)
 呵呵,其实解决方案也简单啦,公司有位大拿写了一个小软件,直接放到ipod里执行,就可以把所有音乐转化成ipod要求的格式啦,原文在此。

使用iTunes太麻烦,关键是它极其缓慢的启动速度,对于iPod Shuffle来说,拷贝歌曲以后直接就可以听是最方便的。经过对iPod Shuffle文件格式的研究,写了一个软件,可以代替iTurns向iPod Shuffle里面传送歌曲。
使用方法:把MiniTunes拷贝到iPod上,把歌直接拷贝到iPod上,歌曲可以放任意文件夹,但必须是英文的,运行MiniTunes即可。
但需要注意:
iPod不支持中文,所以MiniTunes会自动重命名所有的中文歌曲和中文目录,但仅仅是mp3文件。这个应该也是iPod需要iTunes才能传输歌曲的原因。
MiniTunes会搜索当前目录下的所有歌曲以及子文件夹里面的歌曲。由于中文的原因,MiniTunes是不能放到中文目录下用的。

截图如下:

1245828774_capture

下载MiniTunes

 

最后更新于 .

Linux进程管理命令详解(ps和top)
1.ps命令
作用:ps命令主要查看系统中进程的状态。
格式:ps [选项]
主要选项如下。

-A:显示系统中所有进程的信息。
-e:显示所有进程的信息。
-f:显示进程的所有信息。
-l:以长格式显示进程信息。
-r:只显示正在运行的进程。
-u:显示面向用户的格式(包括用户名、CPU及内存使用情况等信息)。
-x:显示所有非控制终端上的进程信息。
-p:显示由进程ID指定的进程的信息。
-t:显示指定终端上的进程的信息。

说明:要对进程进行监测和控制,首先要了解当前进程的情况,也就是需要查看当前进程。ps命令就是最基本、也是非常强大的进程查看命令。根据显示的信息可以确定哪个进程正在运行、哪个进程被挂起、进程已运行了多久、进程正在使用的资源、进程的相对优先级,以及进程的标志号(PID)。所有这些信息对用户都很有用,对于系统管理员来说更为重要。使用”ps -aux”命令可以获得终端上所有用户的有关进程的所有信息,下面结合图讲解进程的基本信息。

130727331

图中第二行代码中,USER表示启动进程用户。PID表示进程标志号。%CPU表示运行该进程占用CPU的时间与该进程总的运行时间的比例。%MEM表示该进程占用内存和总内存的比例。VSZ表示占用的虚拟内存大小,以KB为单位 ...

最后更新于 .

之前有用正则表达式写过一个重复两行压缩成一行的命令,今天我们来看一个讲重复多行压缩成一行的命令。 首先,我们先考虑怎么查出多个重复行。 有两种方法,但是有一种是有bug的,罗列如下:

1)

^\(.*\)\(\n\1\)\+$

2)

^\(.*\n\)\(\1\)\+

详细讲解一下:\+是代表匹配>1个,\1代表是前面的匹配,那么可以看出: 第1种方法是匹配了整个行(不包括换行符),然后加上\n\1,匹配\n\1 >1次,最后匹配到最后一个重复行行尾的换行符,从而匹配到所有重复行。 如图:

删除重复行1

第2种方法则是先匹配了整个行(包括换行符),然后匹配\1 >1次,最后匹配到所有重复行。 如图: 删除重复行2

但是实际上第二种匹配规则是有bug的,即假设最后一个重复行后面再也没有换行符的话,那么是匹配不到的,如图: 第一种方法:

删除重复行3

第二种方法:

删除重复行4

到此为止,既然查找的方法已经出来了,那么替换的方法也就有了

:%s/^\(.*\)\(\n\1\)\+$/\1/

OK,就到这里啦~~~ 

最后更新于 .

一.关于gdb调试core文件总是一堆问号的问题
问题描述:已经在编译选项中加入了-g,但是查看core文件时,还是一堆问号,使用的命令为:

gdb -c core

解决方案:由于gdb -c core这样的使用在有些系统下支持不是很好,所以推荐用如下两种方法:

1)gdb exe

(gdb) core-file core

2)gdb -c core

(gdb) file exe

而其中第二种方法在某些系统上也是不好用的,所以就用第一种即可。

二.回滚svn版本
今天很无聊的改代码,结果把正确的版本给修改掉了,因为实在linux终端上,没有图形界面的svn,所以只能用命令……

首先保证我们拿到的是最新代码,运行svn up,发现目前是29118版本。 然后找出要撤销的确切版本:

svn log spp_xyserver.cpp

根据log发现前面一个版本是29062,比较一下:

svn diff -r 29062 ...

最后更新于 .

查看错误代码errno是调试程序的一个重要方法。当linuc C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值, 不同的值表示不同的含义,可以通过查看该值推测出错的原因。在实际编程中用这一招解决了不少原本看来莫名其妙的问题。比较麻烦的是每次都要去linux源代码里面查找错误代码的含义,现在把它贴出来,以后需要查时就来这里看了。
以下来自linux 的内核代码中的/usr/include/asm/errno.h


#ifndef _I386_ERRNO_H
#define _I386_ERRNO_H
#define EPERM 1 /* Operation not permitted */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
#define EINTR 4 /* Interrupted system call */
#define EIO 5 ...

最后更新于 .

STL比较出名的有如下三个:

一个是SGI STL。STL之父离开HP之后就去了SGI(当然不是去搞侏罗纪公园),然后和Matt Austern这些STL大牛一起搞了SGI STL。SGI STL技术比较新,很规范(但是代码读起来未必好懂) 像concept checking这些技术用的不少,boost graph library的想法也是在这其中产生的。后来有人觉得sgi stl很好,兼容性不够(其实现在已经很不错了),就弄了个stlport项目,顺便提供咨询服务赚点小钱。

一个是RougeWave STL,是Borland C++ Builder 5.0及以前版本采用的STL实现(6.0以后改用stlport)。RougeWave公司在C++程序库领域应该说是鼎鼎大名,在C++标准化过程中出力甚多(比如IOStream)。不过这个STL版本似乎老了点,更新不太勤快,关键是贵(RougeWave 的东西一向如此),所以被Borland一脚踢了。

一个是Visual C++里的STL,作者P.J. Plauger,所以一般也说pj stl。其实这份STL是他公司的产品(他这个公司一共也就3个人,所以人均GDP一定很高),不过他跟MS的关系实在是好得有点古怪 ...

最后更新于 .

这个pdf是我同事的一次分享的,写的很诙谐有趣,但是又精准的抓住要害,突出了vim的优势和便利之处,所以就放在这里和大家分享一下,当然版权是归我同事所有啦~~ 唉,又要费我4兆的空间啊…… vim-hacks下载   转载请注明出处.https://www.vimer.cn

最后更新于 .

    开源文本编辑器Vim的作者Bram Moolenaar推出了新的编程语言Zimbu,一种不拐弯抹角直截了当的实验性编程语言。Moolenaar表示Zimbu集现有语言的优点于一身,同时避开它们的不足。Zimbu代码清晰易读,使用范围广泛——既能写OS kernel,又能写脚本,还能写大的GUI程序,可以编译和运行在几乎所有系统上。Zimbu代码托管在Google Code上,采用Apache License 2.0许可证。     这是前几天在晚上看到的一篇报道,后面也有了一些评论,无非就是一些诋毁之类的文字,发现大众除了乱喷之外还真是一点别人的优点都看不到~     说起来,因为这个我特地仔细的看了一下这位vim作者的介绍:居住在荷兰,从事开源软件的开发,大部分收入来自开源软件使用者的捐赠,还把大量的捐款送给了乌干达的孩子们。的确很厉害的一个人,我突然想起之前在一篇博客里看到的一段话,有的软件,不花钱你都懒得用,而有的软件,你会忍不住想捐赠作者来支持她的开发。而vim真的就是这样一款软件。     已经用vim 4年了,从大学开始一直到上班,写的代码越来越不一样,用的编辑器却从来没有变过。     我在努力,希望能在我成功的时候,亲自好好答谢我这位老朋友。 转载请注明出处.https://www.vimer.cn

最后更新于 .

给大家贴一张vim的键位图。

其实这种图片在网上也是盛传了,但是我个人觉得用vim而不是学vim,就连vim的作者本人都不赞成为了学vim而学vim,所以这张图就拿来参考就好啦,就不要去背啦,要不然会累死的~~当然用的多了,你会发现其实里面大部分按键你居然都用过了!

另外说一下,由于win下的gvim用了兼容win操作的键映射,所以和下面这张图不是很一样,可以在vimrc中把模拟win的映射去掉,这样以后迁到linux下办公也方便~~

转载请注明出处.https://www.vimer.cn