摘要: 网上很多安装的时候都要安装tftpd-hpa tftp-hpa xinetd三个安装包,经我测试,xinetd无需安装,安装好前两个后,修改tftpd-hpa的配置文件即可:etc/default/tftpd-hpa,修改内容如下:RUN_DAEMON="yes" //让此服务为后台进程TFTP_USERNAME="tftp" //启动服务后的提示符TFTP_DIRECTORY="/home/spider/tftpboot" //tftp的目录FTP_ADDRESS="0.0.0.0:69" //监听端口TFTP_ 阅读全文
posted @ 2013-08-21 23:47 Mr.Shadow 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 由于学习多线程编程,所以用到pthread,但是man的时候却发现没有pthread函数库的手册页,然后安装$sudo apt-get install glibc-doc 安装以后,发现还是有很多函数不全,只有一小部分pthread的函数,使用man -k pthread或apropos pthread可以查找到当前manpages中关于pthread的手册。安装manpages-posix-dev就可以了$sudo apt-get install manpages-posix manpages-posix-dev完成! 阅读全文
posted @ 2013-08-01 10:44 Mr.Shadow 阅读(555) 评论(0) 推荐(0) 编辑
摘要: 但是linux世界上还有另外一种东东,叫做信号,来处理突发事件。如果系统调用尤其是阻塞型的系统调用遇到信号,怎么办呢?是等系统调用game over以后再处理信号,还是中断系统调用,尽快将信号投递到进程呢? 想想前面提到的例子,如果wait等的子进程5天后才能退出,父进程的信号投递将等的花儿都谢了。所以对于阻塞性的调用,必须阻止这种情况的发生。 一般来讲,一个系统调用,要么成功,要么失败,但是由于为了及时处理信号,出现了第三种情况,系统调用被信号中断,为了标识这种情况,错误码errno 置为EINTR。我们看到了,这个世界并不完美,编程同样也不完美。这也就是前文引用的errno == E... 阅读全文
posted @ 2013-07-31 09:03 Mr.Shadow 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 具体的可以在linux环境下 用tar --help查看详细说明格式:tar [option] file -c create create a new archive -x extract extract files from an archive -t list list the contents of an archive其中c/x/t不能同时存在 -z --gzip, --gunzip, --ungzip filter the archive through gzip -j, --bzip2 filter the archive through bzip2 -f, --file=ARCH 阅读全文
posted @ 2013-07-27 21:56 Mr.Shadow 阅读(2457) 评论(0) 推荐(0) 编辑
摘要: 功能和strcmp类似,用法也一样. 特别注意:strcoll()会依环境变量LC_COLLATE所指定的文字排列次序来比较s1和s2 字符串。 strcmp是根据ASCII来比较2个串的. 说明若LC_COLLATE为"POSIX"或"C",则strcoll()与strcmp()作用完全相同 阅读全文
posted @ 2013-07-21 09:56 Mr.Shadow 阅读(738) 评论(0) 推荐(0) 编辑
摘要: 一、ctag 当然,第一步就是要下载它!一条命令搞定:$sudo apt-get install ctags如果不幸提示找不到软件包ctags,首先你也许应该update一下你的软件源,还不行的话试试把ctags改成 exuberant-ctags下载完了你就可以用它来产生我们的标签文件tags 了,tags文件是实现跳转功能的英雄,就是它把我们送到我们想要去的地方的——比如我在我的程序里写了一个库函数foo,在某个时刻我想查看这个库函数本身是怎么实现的?那我只需把光标停在关键词上,再按一下组合键 ( ctrl + ] ) 就会立刻帮我跳转到库函数foo的源代码的地方,按一下组合键 (... 阅读全文
posted @ 2013-07-19 14:18 Mr.Shadow 阅读(1864) 评论(0) 推荐(0) 编辑
摘要: 1. 为什么会出现undefined reference to 'xxxxx'错误?首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得不对,你没有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译参数里指定程序要链接数学库,方法是在编译命令行里加入-lm。2.-l参数和-L参数-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了。- 阅读全文
posted @ 2013-07-05 15:57 Mr.Shadow 阅读(2400) 评论(0) 推荐(0) 编辑
摘要: HOWTO do Linux kernel development - take 3 (中文版)译者:张乐 robert_AT_thizlinux_DOT_com原作:Greg KH译注:本文依据take 3翻译,应该不会再有大的改动了,如果有本文会随时更新时间仓促,恐难免错漏,欢迎指正原文:http://permalink.gmane.org/gmane.linux.kernel/349656 (转贴说明:也可以在内核源代码目录下的Documentation/HOWTO找到本文英文版)译文:------------------------------HOWTO do Linux kernel 阅读全文
posted @ 2013-03-16 13:42 Mr.Shadow 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 一种初始化指针变量的方法是使用&运算符把某个变量的地址赋给它,或者更常采用左值( 4.2节):int i, *p;...p = &i;通过把i的地址赋值给变量p的方法,上述语句把p指向了i:在声明指针变量的同时对它进行初始化是可行的:int i;int *p = &i;甚至可以把i的声明和p的声明合并,但是需要首先声明i:int i, *p = &i; 阅读全文
posted @ 2013-03-13 23:57 Mr.Shadow 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 1. 使用<c-r>(即CTRL+R)。步骤如下:在Insert模式下,先按CTRL+R,光标处变成双引号“再按%,即可直接插入当前文件名(含路径)关 于<c-r>,可输入”:help <c-r>“查看详细说明。此处简要说明一下,CTRL-R可以插入0~9号寄存器(numbered register)内的内容,也可以插入特殊寄存器(named register)里的内容。特殊寄存器中,只读寄存器"%包含的就是当前文件名。另外,vim中的复制粘贴(剪贴板操作)也是使用了特殊寄存器+的操作。2. 使用expand()。其实这个也用到了<c-r&g 阅读全文
posted @ 2013-03-12 00:44 Mr.Shadow 阅读(1793) 评论(0) 推荐(0) 编辑