![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
个人记录
文章平均质量分 57
wWX336815
这个作者很懒,什么都没留下…
展开
-
linux判断当前程序是否存在
#include <stdio.h>#include <string.h>int is_running(const char* prg){ const char* pid_file = ".tmp_pid"; const char* p = strrchr(prg,'/'); if(p) p++; else ...转载 2020-03-30 09:25:00 · 401 阅读 · 0 评论 -
c++ what is “instantiated from here“ error?
转载自Stack Overflow。struct Data{ Data(int a,int b){ x = a; y = b; } int x; int y;}std::map<int,Data> m;m[1] = Data(1,2);compile error:1: no matching functio...转载 2019-12-16 09:15:17 · 1085 阅读 · 0 评论 -
模块之间传递强转的应用
两个模块之间互相传递一个ip地址。char* ip = "192.168.100.101";U32 uaddr = 0;int ret = inet_pton(AF_INET,ip,&addr);U8* pByte = (U8*)&addr;char r[4] = {0};r[0] = pByte[0];r[1] = pByte[1];r[2] = pByte[2]...原创 2019-11-21 12:03:21 · 161 阅读 · 0 评论 -
windows,linux 回车区别
在Unix系统下执行 换行操作 用“\n” 在windows 操作做系统下执行换行操作 用“\r\n”,如果用Linux打开会出现^M。在Mac操作系统下执行 换行操作用“\r”...原创 2019-01-04 10:10:46 · 182 阅读 · 0 评论 -
一个任务管理类的c++实现,可直接通过编译,目的:提高效率,防止频繁申请内存和释放
#include <iostream>#include <pthread.h>#include <semaphore.h>#include <errno.h>#include <queue>using namespace std;//注意以下两点,1:queue不提供迭代器,笔者第一次用queue,竟然想使用迭代的方法删除对象...原创 2018-10-30 18:09:39 · 569 阅读 · 0 评论 -
单链表各种操作(逆向打印以及逆转)的c++实现
#include <iostream>using namespace std;class Node;class List{public: List(void):m_head(NULL),m_tail(NULL){} ~List(void){ for(Node* next;m_head;m_head = next){ nex...原创 2018-09-05 17:07:57 · 958 阅读 · 0 评论 -
不多说了,inet_addr等三个转换函数,记一下
#include "common.h"int main(){ //点分十进制==>网络字节序的Int struct sockaddr_in in; bzero(&in,sizeof(in)); char* p = "127.0.0.1"; in.sin_addr.s_addr = inet_addr(p); printf("%ll...原创 2018-08-17 11:30:13 · 696 阅读 · 0 评论 -
Unix网络编程关于time_wait状态的解释
面试网络编程的同学基本上都会被问到对time_wait状态的理解,今天记录一下。TIME_WAIT状态解释: 毫无疑问,TCP中有关网络编程最不容易理解的是它的TIME_WAIT状态,我们可以知道是执行主动关闭的那端经历了这个状态。该端点停留在这个状态的持续时间是最长分节声明期的两倍(2MSL) 任何TCP实现都必须为MSL选择一个值,一般伯克利的实现为30秒(标准建议两分钟)...翻译 2018-08-22 13:07:59 · 296 阅读 · 0 评论 -
一个守护进程写法daemon
#include <stdio.h> #include <u...原创 2019-01-11 14:13:40 · 279 阅读 · 0 评论 -
十进制转换为十六进制
9999/16 624 15624/16 39 039/16 2 72/16 0 2(9999)D=(270F)H将十进制转换为二进制,可先将其转换为十六进制,在转换为二进制即可2 7 0 F0010 0111 0000 1111...原创 2019-02-25 11:32:28 · 1393 阅读 · 0 评论 -
阻塞I/O,非阻塞I/O,同步I/O,异步I/O
根据应用程序是否阻塞自身运行分为:阻塞I/O:是指应用程序在执行I/O操作后,如果没有获得响应, 就会阻塞当前线程,不能执行其他任务。非阻塞I/O:是指应用程序在执行I/O操作后,不会阻塞当前线程, 可以继续执行其他的任务根据I/O响应方式的不同,可分为:同步I/O:指收到I/O请求后,系统不会立刻响应应用程序,等到处理完成,系统 ...转载 2019-02-26 12:09:17 · 307 阅读 · 1 评论 -
知识点记录, 持续更新中
1,查看当前进程打开了哪些文件 lsof -c a.out,查看端口对应相应进程(两种方法): lsof -i:50000/netstat -tunlp | grep 50000,根据进程id查看进程占用端口 netstat -nap | grep pid2, 查看当前目录下c文件的行数 find . -name "*.c" | xargs wc -l3, pidof a...原创 2019-03-06 22:23:04 · 574 阅读 · 1 评论 -
makefile详解。
概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makef...转载 2019-04-14 21:58:26 · 164 阅读 · 0 评论 -
vim 常用的一些命令
vim常用命令总结:移动:w 移动光标到下一个单词的开头e 移动光标到下一个单词结尾b 移动光标到上一个单词0 移动单词到本行最开头$ 移动光标到本行末尾处H 移动光标到屏幕的首行L 移动光标到屏幕尾行gg 移动光标到文档首行G 移动光标到文档尾行ctrl+f 向下翻页ctrl+b 向上翻页ctrl+d 向下翻半页ctrl+u 向上翻半页查找:/xxx(?xxx):...原创 2019-06-16 18:07:18 · 232 阅读 · 1 评论 -
gdb调试整理中,常用命令
gdb调试编译时必须加-g选项,如果想去掉符号表strip a.outgdb ./a.outulimit -c unlimited可以生成core文件调试core文件 gdb a.out core.111运行r(run) 开始运行r argv[1] argv[2]//命令行参数c(continue):继续执行到下一断点n(next):单步调试,不进函数s(step):进入函...原创 2019-06-17 23:02:37 · 192 阅读 · 0 评论 -
.c到a.out诞生过程
编辑-->预编译-->编译-->汇编-->链接1)编译: vi hello.c2)预编译: gcc -E hello.c -o hello.i3)编译: gcc -S hello.i -->hello.s 生成汇编4)汇编: gcc -c hello.s -->hello.o 生成二进制目标代码5)链接 :...原创 2018-08-22 10:32:30 · 422 阅读 · 0 评论 -
宏定义一些用法
一:参数名必须保持一致:#define Fun(a,b) f(a,b)Fun(1,2) ===>f(1,2)#define Fun(a,b) f(a1,b2)Fun(1,2) ==>f(a1,b2)二:##一些注意事项#define SIGN(x) INT_xSIGN(3) ===> INT_x#define SIGN(x) INT_##xSIGN(3)==&g...原创 2018-08-08 13:23:10 · 303 阅读 · 1 评论 -
带宽换算单位记录
带宽换算成Kbps单位就等于码率,(两者单位一样的) 10Mb宽带 = 10M * 1024 / 8 = 1280Kbps(KByte)1g(文件大小) = 1024m = 1024*1024 kb = 1024*1024*1024 b (Byte)带宽的描述是以比特位(bit)为单位,而通常网速则是以字节为单位(bytes)1G= 1024原创 2017-12-25 10:44:02 · 3152 阅读 · 0 评论 -
More Effective 35个有效
1,仔细区分pointers和reference当你知道你需要指向某个东西,而且绝不会改变指向其他东西,或是当你实现一个操作符而其语法无法使用pointer时,你就应该选择reference,任何其他时候请采用Pointers.2,最好使用c++转型操作符3,绝对不要以多态的方式处理数组class BST{}class BalenceBst : public BST{}void pri...原创 2017-12-25 11:14:31 · 189 阅读 · 0 评论 -
随笔记录
论函数调用约定 在C语言中,假设我们有这样的一个函数: int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保转载 2017-12-28 11:09:54 · 186 阅读 · 0 评论 -
vs2010查看汇编代码
工具->选项->汇编->常规->启用地址级调试原创 2018-03-31 09:53:28 · 882 阅读 · 0 评论 -
用代码判断大小端模式以及重解释类型转换的定义
一:首先记录下几个小的知识点int i = 0x12345678;12是数据i的高字节.大端模式定义:数据的高位(高字节)存储在低地址中,数据的低位(低字节)则存放在高地址中小端模式定义:数据的高位存放在高地址,数据的低位存放在低地址处.示例代码:int i = 0x12345678;char* p = reinterpret_cast<char*>(&am...原创 2018-04-12 18:04:41 · 451 阅读 · 0 评论 -
udp connect作用
一: 虚表存储地方,数据段吧。data segment二: udp的connect与不用connect区别:1,指定了对端地址,只能往绑定 的地址发送消息2,内核也只会接收绑定的对端地址为来源的数据3,发生异步错误的时候会上报给该进程三:connect连接如何不阻塞 设置套接字为非阻塞,发起连接,之后用select判断四:stl中区间赋值的效率比单个赋值效率快很...原创 2018-05-25 17:52:01 · 385 阅读 · 1 评论 -
一个string类伪实现(注意拷贝赋值的实现copy_and_swap)
#include <iostream>#include <cstring>using namespace std;class String{public: String(const char* p = NULL){ m_str = new char[strlen(p?p:"") + 1]; strcpy(m_str,p?p:""); ...原创 2018-06-25 10:09:27 · 217 阅读 · 0 评论 -
python正则表达式个人总结
一些基本用法:记录一下,以备不时之需字符匹配:1:普通字符。 大多数字母和字符一般都会和自身匹配2:元字符: . 任意一个字符(换行符除外) ^ 匹配行首,放在要匹配字符串头部 r = r"^hello" $ 匹配行尾,放在字符串尾部 r = r"hello$" []常用来指定一个字符集[abc],[a-z],表示匹配其中任意一个字符即可,元字符在 字符集中不起作用,在[]中出...原创 2018-07-09 13:20:34 · 229 阅读 · 0 评论 -
拷贝构造私有
如果希望自己的类不能被拷贝,可以考虑实现一个 class noncopyable { protected: noncopyable (void) { } ~noncopyable (void) {...原创 2018-07-09 13:24:48 · 263 阅读 · 0 评论 -
时间参数是double型,如何分别转换成Int赋值给struct timeval?
double d = 2.34089;struct timeval tv;tv.tv_sec = (int)d;tv.tv_usec = (int)((double)(((double)d-(int)d)*1000000))原创 2018-07-05 10:22:16 · 863 阅读 · 0 评论 -
一个简单的关于命令行重定向的记录(command > file 2 > &1的解释)
首先2 > &1等价于dup2(1,2);执行之后也就是2共享1的文件表。1,command > file 2 >&1等价于:首先command > file 2 >&1,等价于command 1>file 2 > &1具体例如:a.out 1 > a.txt 2>&1open(a.t原创 2018-07-17 20:37:11 · 1217 阅读 · 0 评论 -
一个观察者c++的实现,网上看了很多,自己实现的这一版感觉更好点
#include <iostream>#include <vector>using namespace std;class Observer;class Subject {public: void Attach(Observer* o) { m_vecOb.push_back(o); } void Detach(Observer* o) ...原创 2018-07-05 15:42:06 · 267 阅读 · 0 评论 -
select
使用select的时候得注意:该函数返回后,描述符集中任何未与就绪描述符所对应的未返回时均被清0,为此每次调用时都得再次把所有描述符集内所关心的位均置为1。select常常犯两个编程错误,忘了对最大描述符加1:maxfd参数指定的是待测试描述符个数,它的值是待测试的最大描述加一,描述符0,1,2,----一直到maxfd-1都会被测试。例如设置了{1,4,5};那么maxfd = 6,因为我们会从...原创 2018-07-05 23:22:47 · 297 阅读 · 0 评论 -
很经典的一些宏的用法
一:#ifndef foreach#define foreach(container,it) \for(typeof((container).begin()) it = (container).begin();it != (container).end() ;++it)#endif二:#ifndef TM_BEGIN#define TM_BEGIN(num) \struct...原创 2018-07-19 19:36:33 · 230 阅读 · 0 评论 -
c++单例模式,多线程使用
c++ 11保证了这样做是线程安全的。一:class Singleton{static Singleton* GetInstance(){ static Singleton s; return &s; }private: Singleton(){} Singleton(const Singleton& that);};...原创 2018-07-30 09:38:23 · 507 阅读 · 0 评论 -
stl源码剖析一些记录
STL 定义有五个全局函数,作用于未初始化的空间上.construct(),destory(),uninitialized_copy(),uninitialized_fill(),uninitialized_fill_n();一:uninitialized_copy()使我们能够将内存的配置与对象的构造行为分离开来,templateForwardIterator uniniti转载 2017-12-05 20:35:25 · 142 阅读 · 0 评论