- 博客(51)
- 资源 (19)
- 收藏
- 关注
原创 玩玩linux下的errno, perror, strerror
少说废话, 多玩程序:#include #include int main(){ printf("%d\n", errno); int i = 0; for(i = 0; i < 5; i++) { errno = i; char szTest[100] = {0}; snprintf(szTest, sizeof(szTest), "%d", errno
2015-04-30 22:30:33 7390 4
原创 linux下的四个简单函数介绍:getpid, getppid, getuid, getgid
直接看程序:#include int main(){ printf("pid:%d, ppid:%d, uid:%d, gid:%d\n", getpid(), getppid(), getuid(), getgid()); return 0;} 结果为: [taoge@localhost learn_c]$ echo $$2774[taoge@localh
2015-04-30 21:23:26 24894 16
原创 telnet www.baidu.com 80后怎么退出到Windows的cmd中来呢?
我们经常使用telnet xxx port的形式登录服务器, 比如:C:\Documents and Settings\Administrator>telnet www.baidu.com 80 登录成功后, 我们通常都需要知道怎么退回到Windows的cmd中来, 具体方法是:先执行ctr + ], 然后执行quit即可。 如图:
2015-04-30 19:44:41 32590 1
原创 玩玩linux下的atexit函数------负责登记的函数
我们先来看一个程序:#include void fun1(){ printf("fun1\n");}void fun2(){ printf("fun2\n");}int main(){ atexit(fun1); atexit(fun1); atexit(fun2); printf("main\n"); return 0;} 结果为(注
2015-04-29 22:41:03 8146 2
原创 玩玩linux下的kill、raise函数
之前说过kill命令, 我们也知道了, kill命名并没有杀死的意思, 而仅仅是发送信号, 今天, 我们继续学习它的函数形式。 raise这个单词的意思太多, 其中的一个意思是提出、抛出、发出, 实际上raise函数也是发出信号的。 kill和raise有如下等价关系: kill(getpid(), xxx) 等价于rase(xxx), 意思是, raise函数就是向当前进程发信
2015-04-29 22:04:10 12279 1
转载 Linux下/proc目录简介
由于无法找到最原始的地址, 所以仅仅给出一个间接地址:http://blog.csdn.net/zdwzzu2006/article/details/7747977, 向原创作者表示致意. (我会加上红色的注释部分) 1. /proc目录Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制(也就是说/proc
2015-04-29 21:27:00 7787 1
原创 工作效率提升之创建桌面快捷方式------不是不知道, 而是没有意识到
我先说说这么一个场景, 在linux服务器上编译后, 生成的库文件通常保存在很深的路径下, 现在Windows通过samba映射到linux上, 也就上说, linux服务器相当于挂载在Windows上, 可以看到Windows多了一个盘符。 为了把那些库文件取到Windows本地, 我每次都是从Windows上进入Linux的深深目录, 一级一级地进, 找到库文件, 每
2015-04-29 20:19:46 7214
原创 仅从代码可读性来看void fun(const void *p, int len)中const的重要性
const可以增强程序的安全性, 让运行期的错误提前到编译期, 编译器强迫程序猿做出修改, 提高软件质量, 这个我早就介绍过了。 下面, 我从代码可读性的角度来说说const的重要性。 我看到类似于这样的一份代码:#include #include typedef struct _node{ int a; int b; int c;}Node;void fun(void
2015-04-29 00:13:17 7869 1
原创 如何用C程序获取www.baidu.com的ip地址?---实际是请求dns server解析
怎样用C程序获取www.baidu.com的ip地址呢? 实际上, 这个问题我们之前间接讨论过, 今天我们继续来说一下。 当然啦, 你得配dns地址, 也就是要指定dns服务器, 否则, 怎么能解析www.baidu.com呢? 当然了, 你可以直接ping www.baidu.com获取, 结果如下:C:\Documents and Settings\Adminis
2015-04-27 23:03:51 10401
原创 《高质量程序设计指南---C++/C语言》 林锐、韩永泉
如果没有记错的话, 我应该是2012年买该书的, 夏天。 那个时候, 我想继续补一下自己的C/C++知识和功底, 也为笔试面试做一些准备。 买了该书之后, 有种如获至宝的感觉, 被林锐的《大学十年》深深触动。 边啃该书, 边做笔记, 这样, 新书就渐渐成了旧书了。 也经常对其中的一些知识点不太懂, 放着就放着了, 后来又陆续地看, 不懂的知识在慢慢减少。 但是, 总有一些东西没有去深入涉猎。
2015-04-27 21:59:50 10819 2
原创 《乡土中国》 费孝通
老伴是学文科的, 爱买各种各样的书, 涉猎广泛, 她看的精不精, 我先不说。 我呢, 耳濡目染之下, 也喜欢看各种人文科学、社会学、历史学、心理学等方面的书, 对于一理工科出身的屌丝, 也是好事, 多了解一下外部世界, 不要天天就知道个coding和debugging. 2003年(我还在读初中), 全国高考语文试卷的阅读部分引用了柯灵先生的《乡土情结》, 我被柯老先生的对乡土的情结所打
2015-04-26 21:51:23 8594 2
原创 C++编译器会为类产生哪些默认的成员方法?---聊聊C++的Big Three
C++会为类产生哪些默认的成员方法?看代码:#include using namespace std;class A{};int main(){ A a; // 调用了A(); A b(a); // 调用了A(const A &x); A c = b; // 注意, 调用的还是A(const A &x); c = b; // 调用了A& operato
2015-04-26 17:17:05 7523 1
原创 再谈谈只针对C++编译器/链接器的extern “C“------C与C++的相互调用
说明: 我用的编译器是VC++6.0, 支持.c和.cpp文件的编译。 很多朋友对在变量或者函数前面加extern比较熟悉了, 但对于extern "C"则有点措手不及, 有时。为什么需要extern "C"呢? 我认为这都是c++惹的祸, 如果没有C++这个恐龙, 也就没有所谓的C与C++的相互调用,那也就不用纠结什么extern "C"了。 在本
2015-04-26 14:36:51 9857 10
原创 谁再把kill命令说成“杀死“就应该打屁股了
对linux的kill命令不太了解的一些朋友一直会有这样一个错觉: kill命令就是用来杀死一个进程啊! 我要说, 这种理解是比较初级的。 其实, kill这个命令的命名本来就误导了一大批人, 我不知道是谁取了kill这个名字, 我要是知道, 首先要为大家打他的屁股。 kill命令的真正作用是:将某信号发送给某进程或者进程组。 下面, 我们先来看
2015-04-25 23:34:48 9131 2
原创 利用thread来简要模拟signal函数功能
对于程序员来说, 代码比文字有趣多了, 所以我们少说废话, 多玩代码。 我们先来看一个简单的多线程程序(test.c):
2015-04-25 22:26:17 7803
原创 如何获取linux shell中ls进程的进程号?---有趣的问题!
我们知道, 在linux中, 开启一个shell, 实际上就是开启一个shell进程, 如果在shell中运行一个ls命令, 实际上就是让shell进程拉起了一个ls进程, 且shell进程是父进程, ls进程是子进程。 某次, 我胡思乱想, 既然ls执行的时候对应一个进程, 那么怎么获取ls进程的进程号码呢? 执行一下ls, ls很快执行完毕了, 进程消失了啊。 于是, 我想到
2015-04-25 21:13:14 10337 3
原创 模拟linux的shell---顺便复习一下fork,execlp和waitpid函数
我们知道, 如果在linux的shell中执行ls, 那么实际上shell对应的进程是父进程, ls对应的进程是子进程。 我们已经模拟过ls了, 下面, 我们来模拟一下shell, 让我们模拟的shell来执行linux的ls, pwd等命令, 模拟linux shell程序如下(也就是说, 下面程序就相当于一个shell):#include #include #define M
2015-04-25 20:03:55 10047
原创 linux下ls命令的简要模拟---顺便学学opendir、readdir函数
我们来简要模拟一下linux中的ls命令, 代码如下:#include <stdio.h>#include <dirent.h> // DIR,struct dirent,opendir, readdir
2015-04-24 23:00:23 9159 3
原创 我常用的gcc编译器选项
本文来小结一下我常用的gcc编译器选项: 1. gcc test.c 这个最直接, 会在当前目录下生成a.out, 然后执行./a.out就可以运行程序了。 我在玩程序的时候, 最喜欢用这个, 简洁清晰。 2. gcc -o test test.c 这个o, 是小写的, 并不是指定什么目标文件(object file), 而是指定可
2015-04-24 22:03:10 8217 1
原创 我修改的问题单居然回归不通过?---趣闻二则
趣闻一: 测试MM反馈, 我改的问题单, 回归不通过啊。 我当时挺纳闷的, 我这么认真, 居然有问题单回归不通过? 我亲自一侧, 果然有问题。 遇到这种情况, 我已经很有经验了, 别瞎定位, 先看看谁改了配置库上的对应模块的修改记录, 一看, 还真有人改了东东。在我修改之后, 他又引入了新问题。 好吧,责成让他修改。 趣闻二: 测试MM说:
2015-04-24 21:39:40 9298
原创 linux服务器开户:groupadd, useradd, passwd的使用
linux服务器下通常有很多用户, 当有新员工入职的时候, 经常需要为他们开户, 也就是开个账号, 这样他/她才能工作啊。 在本文中, 我们来简要了解一下linux的开户。 要注意, 如下操作都需要在root权限下执行, 普通用户执行不了。 1. groupadd embed 增加一个组, 名称为embed 2. useradd -G embed
2015-04-23 23:13:51 8500
原创 C++智能指针auto_ptr源码完全解析---以微软auto_ptr为例来探讨auto_ptr的用法
对于C/C++程序员来说, 内存泄露是一个谈之色变的话题, 很多时候, 机器运行1天2天都是ok的, 但运行到一个星期后, 就卡得要死。 实际上, 很多时候是内存泄露造成的。 内存泄露很容易引入, 但是定位起来非常非常难, 在内存泄露初期, 通常没有异常症状, 但随着内存泄露的累积, 内存逐渐被啃光, 最终导致卡死或者死机。 申请堆内存, 又没有正确释放, 就会导致内存泄露
2015-04-20 21:23:28 7817 5
转载 Linux下IP冲突检测程序源码及分析(利用免费arp)---感谢原作者
由于没有找到源代码的原作者, 所以就给出一个间接的转载地址:http://blog.csdn.net/wanxiao009/article/details/5622296, 再次感谢源代码原作者 该程序运行在linux环境下,可以检测ip冲突, 我试过, 挺靠谱的,现摘录如下:#include #include #include #include #inclu
2015-04-19 18:15:41 11169 6
原创 《图解http》 上野宣
先说明一下, http大牛请绕道行走, 请直接看高手推荐的《HTTP权威指南》 之前, 工作中涉及到一些html, css, js语言, 当初就简单地学了一下, 能顺利处理工作中遇到的问题。 后来又需要进军新的领域, 需要熟悉基于http的soap协议, 于是决定粗略地学习一下http, 期望对http有个基本清晰的了解。
2015-04-19 17:42:27 12014 2
原创 从telnet www.baidu.com 80 聊聊我经历过的tcp“三次握手”失败---顺便验证telnet是基于tcp协议的
在本文中, 我们首先来复习一下telnet命令, 然后聊聊我碰到过的“三次握手”失败经历。 在windows上利用wireshark启动抓包, 然后在cmd中执行telnet www.baidu.com 80, 去访问百度的80端口, 抓包结果如下: 我们看到, 前面两个包是dns请求和回应, 其中101.226.4.6是360推荐给我的dns服务器,
2015-04-18 23:44:55 18013 4
原创 为什么有时ping不通www.baidu.com但可以访问www.baidu.com网页?
了解网络的人, 基本上都用过ping命令, 这个优秀的小工具通常能非常靠谱地检测网络的连通性。 但是, 某次, 在某个特殊环境中, 我发现ping不通www.baidu.com但可以访问www.baicom.com网页. 刚开始一看, 这不是矛盾了么? 后来仔细想想, 觉得没什么不合理的。 ping www.baidu.com会利用到dns协议和icmp协议, 在上述特殊环
2015-04-18 21:34:07 31068
转载 其实Unix很简单
转载地址:http://blog.csdn.net/haoel/article/details/1533720/其实Unix很简单 陈皓 很多编程的朋友都在网上问我这样的几个问题,Unix怎么学?Unix怎么这么难?如何才能学好?并且让我给他们一些学好Unix的经验。在绝大多数时候,我发现问这些问题的朋友都有两个特点:1)对Unix有畏难心理,对其没有信
2015-04-18 12:10:00 7783
原创 《Windows 网络编程》 罗莉琴
当初为了学习网络编程, 买了罗莉琴主编的《Windows 网络编程》, 书上有大量的代码实例, 非常符合我的胃口。 我花了较多时间调试修改书上的代码, 在网络编程方面有所进步。 学习网络编程, 最重要的不是拿着厚厚的《unix网络编程》和《TCP/IP详解》死啃, 看天书, 看理论yy, 尽管很多网上所谓的“大牛”每次发言都不离《unix网络编程》和《TCP/IP详解》。
2015-04-18 11:56:57 12344 12
原创 用Wireshark抓包来揭开ftp client GG和ftp server MM的勾搭内容并用C代码来简要模拟实现Windows自带的ftp client
前面, 我们玩过http, 颇有点意思, 在本文中, 我们继续来玩ftp(file transfer protocol). http和ftp都是建立在tcp之上的应用层协议, 无论他们怎么包装, 怎么装bigger, 最终还是基于tcp端到端传输的。本文主要分为两个部分: 一.用Wireshark抓包来揭开ftp client GG和ftp server MM的勾搭内容。二.用C代码来简要模
2015-04-17 20:48:22 17517 3
原创 走进http的世界------用C代码模拟浏览器IE(http client)访问web(http server)的行为
在本文中, 我们来玩一下http. 既然你看到了这篇文章, 那就说明你肯定直接或间接借助了http协议(浏览器的实现需要用到http协议)。 很多书本把http介绍得玄乎其玄, 高深莫测, 其实, http也没什么大不了的。 当我们用浏览器看登录www.baidu.com的时候, 浏览器相当于客户端, 而服务端是百度公司掌控着。 要想大致了解http, 网上资料可
2015-04-15 23:21:28 31038 6
原创 心跳机制tcp keepalive的讨论、应用及“断网”、“断电“检测的C代码实现(Windows环境下)
说明: 1. 本文的讨论和实验都以Windows为例, 其实在linux上也大同小异。 2. 在第一次写此博文时, 我对某些地方有一些误解, 现予以更正, 对文章结构做了较大调整,也欢迎大家提出质疑。 3. 在做实验玩代码的时候, 意料之中地发现腾讯QQ也在玩心跳, 不清楚具体怎么实现的, 但有点意思哈。
2015-04-13 22:38:45 26452 38
原创 《Windows Sockets 网络编程》. Bob Quinn & Dave Shuttle (非常实用的Windows编程书籍)
历时一年多, 终于相对认真且完整地把Bob Quinn和Dave Shuttle的名著Windows Sockets 这本书学了一遍(实际上有的章节学过好几遍), 受益较多。 以后就把这本书当做自己案头参考书, 有空的时候, 要随时再阅读一些, 有不懂的, 要再回来参考。 虽然是1995年写的, 但到现在,书还是很权威的, 足见分量。 作者毕竟是WinSock的相关开发人员
2015-04-12 17:25:41 9736 2
原创 如何偷窥到socket对应的内核缓冲区中有什么数据? 有多少数据?---利用recv的MSG_PEEK和ioctlsocket的FIONREAD
很多时候, 应用程序仅仅想知道内核缓冲区中有什么数据, 或者想知道有多少数据可读, 也就是说, 应用程序仅仅想偷窥一下里面的数据, 并不是想偷取, 那怎么办呢? 事实上, 我们之前已经大致说过, 现在, 我们继续来复习一下recv的MSG_PEEK: 服务端程序为:#include #include // winsock接口#pragma comm
2015-04-12 15:06:12 12810 8
原创 什么是socket的name? 怎样给socket取一个name? --- 以生宝宝并取名的过程再谈socket、name、bind和socket name
在网路编程中, 我们经常听说到socket, 今天, 我们来详细了解一下socket的name. 一个socket name有三要素, 以WinSock为例, 它是在结构体SOCKADDR_IN中定义的, 三要素就是: 协议, ip, port. 下面, 我们以生宝宝并取名的过程来叙述。对应关系为 socket ------ 宝宝
2015-04-12 11:30:35 10927 5
原创 为什么TCP服务端需要调用bind函数而客户端通常不需要呢?
那一年, 某哥让我写个tcp服务端客户端程序, 我草草写完, 然后他检查,并问我, 为什么客户端不用bind呢? 然后, 我卡壳了, 好尴尬啊。 现在, 我们来一起彻底了解一下这个问题。 先看看bind函数是干啥的。bind函数就是绑定, 将一个socket绑定到一个地址上, 也可以这么说:bind函数对一个socket进行命名(注意:socket名称包括三要素: 协议, ip,
2015-04-12 00:54:28 28261 28
原创 我赞同Bob Quinn和Dave Shute的说法: WinSock中的SO_REUSEADDR就是个鸡肋, 最好不用它
本文, 我们讨论的范围是WinSock, 不是unix/linux中的socket. 在Windows Sockets这本书中, 作者Bob Quinn和Dave Shute说:SO_REUSEADDR很少有正当的需要, 我们应该尽量不用它。 不高谈阔论了, 我们来程序:(说明, 我pc的ip是192.168.1.100)#include #include
2015-04-11 23:53:55 7562 1
原创 利用map将“简写信件”转化为“原始信件”
我们首先来看这样一个场景: 某人很懒, 写信的时候, 经常用简写的形式代替完整的形式, 比如:9494--->Yes, it is!asap--->as soon as possiblesb--->se bi.... 现在, 要写一套程序, 将这些简单的直接还原为原始的完整形式。 其实, 思路是很自然的, 对简写信中的每一个单词进行判断, 如果需要转化,
2015-04-11 21:18:13 7676
原创 经典的单词计数程序---利用关联数组map和互斥集合set
在前面的文章中, 我们详细讲述了map这个关联数组, 并介绍了经典的单词计数程序, 下面, 我们看看这个场景: 单词计数的时候, 不考虑一系列的单词, 如不考虑"a", "kj"等等。 我们知道, set是个互斥集合, 所以在此可以排上用场了, 且看:#pragma warning(disable : 4786)#include #include #include #include
2015-04-10 23:57:09 7954 1
原创 关联容器map的下标操作(特殊)---map的本质就是关联数组, 数组的本质就是映射!
下标操作,说白了, 就是一种映射关系。 高中的数列, C语言中的内置数组, 都应该学过吧, 这些都可以理解为下标操作。 我们知道, 典型的顺序容器中, string, vector, deque都是支持下标操作的, 当然, 很多地方都说支持随机访问, 其实这个随机访问实际上就是只下标操作。 对于关联容器而言, set, multiset中的元素就是其关键字本身
2015-04-10 23:11:46 9306 1
原创 STL中的multimap---顺便说说如何查找同一关键字对应的所有值(利用count, lower_bound/upper_bound, equal_range)
我个人感觉哈, map的应用场景比multimap更多, 不过, 我们还是来学一下multimap。 我们知道, multimap中, 一个关键字可能对应多个不同的值, 怎么获取呢?我们来看程序, 接招(介绍三种方法):#pragma warning(disable : 4786)#include #include #include using namespace std;int main(){ multimap mp; mp.insert(pair(3, "hehe")
2015-04-10 20:57:14 12648 1
linux protobuf安装文件
2016-11-04
linux tree命令的源码
2015-11-01
编译好的openssl库和头文件
2014-12-14
入门数据库sqlite3的最佳实践资料
2014-08-12
在Windows下学习Linux命令
2013-08-08
音频处理软件Gold Wave
2013-07-17
H.264visa软件
2013-07-13
YUVviewer :原始的YUV视频的播放器
2013-06-24
经典的C语言编译器:TC2.0
2013-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人