LINUXC++
文章平均质量分 59
cd2108006026
WHAT
展开
-
The Art of Debugging with GDB
CH11. Ctrl +P,Ctrl+N可以浏览以前的命令并编辑,回车键则是重复上一次的命令;2.版本6.1以后,有TERMINAL USER INTERFACE模式提供了基于图形界面和文本界面的折中;为了以TUI模式运行gdb,需要指定-tui选项;或者在调试时输入CTRL+X+A组合键;3.在run后可以为程序添加参数;例如 r 6 5, 运行程序并传了两个字符串参数(需翻译 2010-03-02 12:35:00 · 1823 阅读 · 0 评论 -
记录一些简单实用的vim用法
lsof -i:6789 查看哪些进程占用了6789端口 1. 假如有这么一句 #include "SocketTask.h" 如果想查看这个文件内容,那么就把光标放上面,输入命令gf~好记吧 2. :q是退出; q:呢?是查看输入的命令历史 3. 寄存器命令 用q命令,后面跟寄存器名字(单个字母假设是a),开始记录你的命令输入; 最后翻译 2010-05-18 10:45:00 · 3384 阅读 · 1 评论 -
TCP终止连接时的几个状态
TCP终止连接需要4个分节,简称四次握手。 首先要明确的概念是:当一对TCP sockets建立了连接,客户和服务器是对等的,没有区别; TCP连接是双工的,所以一条连接其实是“两条单向的连接” 连接的终止: 1. 主动方发出设置了FIN位的报文,表示主动终止从本地到远端的单向连接; 此时,主动方进入FIN_WAIT1状态,意思就是它在等待远端的FIN报文; 2. 远原创 2010-03-06 17:26:00 · 1315 阅读 · 0 评论 -
程序调试总结 04-18
<br />1.现象:程序中调用DLL中的某个函数f,但是断点跟踪,却调用了函数g而不是f<br />经调试,在call eax这条汇编语句中,查出函数地址就是g的地址;而f和g的地址只差4个字节;<br />于是检查DLL头文件,找出了原因:dll和h文件不匹配<br /> <br />2.现象:某个对象内有一个map成员,后来在某个地方遍历该map时抛出了异常。<br /> 经调试,发现该map已经被损坏,内部的头指针为0;<br /> 于是在该对象的map成员前后各加了一个char变量,再调试,当然原创 2011-04-19 09:33:00 · 473 阅读 · 0 评论 -
为什么不应该使用“volatile”类型
<br />C programmers have often taken volatile to mean that the variable could be<br />changed outside of the current thread of execution; as a result, they are<br />sometimes tempted to use it in kernel code when shared data structures are<br />being used.转载 2010-06-09 16:17:00 · 1194 阅读 · 1 评论 -
安装mysql
因为马上要做一个mysql的C api封装。以前装mysql都是用yast搞定这次下载了源码,一顿configure,make,make install启动mysqld-safe时总是出现一些错误,大多是权限不够,加个选项--user=root来启动就差不多了; 最后又从日志发现一错误 File ./mysql-bin.index not found 好像是什么二进制日原创 2010-05-21 10:25:00 · 577 阅读 · 0 评论 -
一种在编译期保证模板类参数T必须实现某函数的方法
我们平时写一个模板类,声明大概如下 template class TaskManager{ vector tasks; void ParseEveryTask() { vector::iterator it = tasks.begin(); while ( it!=tasks.end() ) { it->parse();//注意,T必原创 2010-04-11 13:31:00 · 715 阅读 · 0 评论 -
C++ const变量机制
#include int main(){ const int a = 10; int * p = (int *)&a; unsigned long addr = (unsigned long )&a; *p = 0; printf("%d/n", *p);// 0 printf("%d/n", a);// 10 printf("%d/n", *(int*)add原创 2010-03-18 15:01:00 · 471 阅读 · 0 评论 -
epoll ET mode with tcp nonblocking socket
epoll ET mode with tcp nonblocking socket(linux kernel 2.6.18)[b]现假设A, B建立了tcp连接,且A可写[/b]1) 2.6.18并未实现真正意义上的 edge triggered, 事件会报多次,比如socket可写,这时tcp接收到有5bytes,触发EPOLLIN | EPOLLOUT,不管应用层是否read()掉这5byte转载 2010-03-22 16:27:00 · 1684 阅读 · 0 评论 -
TCP 的RST 报文
假如有一条从A到B得TCP连接;此时B的接收缓冲区中有数据还没读取;假如这个时候B调用CLOSE,那么不会引起4次握手断开连接;而是直接发送RST;这样A端的recv返回一个错误(-1);用Stevens的话说,这是异常终止连接; 而在close之前,先shutdown(fd, SHUT_WR),引发FIN的发送,使得A端recv返回0,可以避免这个问题;不过。。有翻译 2010-03-11 13:01:00 · 5109 阅读 · 0 评论 -
printf画的俄罗斯方块(linux异步I/O,C++)
这个方块游戏是用linux终端的光标控制、颜色设置做的(添了个功能,字母P暂停、恢复游戏)用 A S D W 控制移动、转向,空格键下坠到底;对POSIX线程简单封装一下; (另,为避免闪烁,我故意忽略了锁保护curx,cury。实际上,加了posix读写锁,也不闪烁,除了按空格下坠时略有延迟。) #include #include #inclu原创 2010-03-04 10:54:00 · 6419 阅读 · 2 评论 -
GCC O2编译的bug
最近对以前写的tcp网络库做吞吐量测试,gcc O1编译,运行效果很好,可以达到900MiB/s。 但是问题来了,当我用gcc O2选项编译网络库,程序一启动就core掉。 查看coredump文件,原因大概如下: 挂在g_pool.DoSomething(); 但是在DoSomething()里, this != &g_pool; 非常诡异。 我对自己的程序还是很有信心,不会原创 2013-01-24 19:02:31 · 3029 阅读 · 0 评论