- 博客(84)
- 问答 (13)
- 收藏
- 关注
原创 知识点记录, 持续更新中
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 633 1
原创 windows进程当前目录和进程的绝对路径获取方法
windows下获取进程当前的运行目录GetCurrentDirectory 获取进程绝对路径函数GetModuleFileName例如我在cmd中D盘根目录直接运行D:\test\wangjiyao\test.exe那么此时GetCurrentDirectory结果就是D:\然后GetModuleFileName结果是D:\test\wangjiyao\test.exe...
2020-04-15 10:07:01 1072
转载 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 432
原创 大量warning:libb.so needed by liba.so not found.的问题解决方法
例如:warning:libb.so needed by liba.so not found.原因是:例如代码引用了liba.so,但是liba.so又引用了libb.so,这种情况是由于makefile没有显示指定需要链接b.so,解决这个问题目前有三种方法:1:在makefile里面显示链接-lb,2:可以增加rpath参数,指定libb.so的路径3:可以将libb.so的路径加入系统链接...
2020-03-02 22:42:10 6315
转载 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 1132
原创 new/delete
一个new的大概实现。所以delete 空指针是没错的,算是合法操作// new circle(…){ void* temp = operator new(sizeof(circle)); try { circle* ptr = static_cast<circle*>(temp); ptr->circle(…); return p...
2019-11-26 11:19:45 133
原创 sizeof相关
int main(int argc,char* argv[]){ char c[] = "123456"; printf("sizeof = %d,strlen = %d\n",sizeof(c),strlen(c));//6,7 char c1[100] = "123456"; printf("sizeof = %d,strlen = %d\n",sizeof(...
2019-11-21 14:21:57 157
原创 模块之间传递强转的应用
两个模块之间互相传递一个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 189
原创 环境变量打印
#include <stdio.h> int main(){ extern char** environ; char** env; for(env = environ;env && *env;++env){ printf("%s\n",*env); } }~...
2019-06-24 23:38:10 372
原创 linux 静态库,动态库简单使用示例
nm 命令可以看二进制文件的符号预编译 去掉宏 gcc -E hello.c -o hello.i编译 高级语言-->汇编 gcc -S hello.i汇编 汇编-->目标文件 gcc -c hello.s链接 gcc hello.o -o hello.h 源码头文件.c 预处理前的源码.i 预处理后的源码.s 汇编语言文件.o 目标文件.a 静态库.s...
2019-06-23 14:06:43 256
原创 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 220
原创 常用最简单汇编命令:
操作码 操作数 功能mov A,B 把B的值赋给Aadd A,B 把A同B的值相加,并将结果赋给Apush A 把A的值存储在栈中pop A 从栈中取出值,并将其赋给Acall A 调用函数Aret 无 将处理返回到函数的调用源以下有一些简单例子:push...
2019-06-16 18:26:09 499
原创 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 258 1
原创 获取ip地址
#include <stdio.h>#include <sys/socket.h>#include <unistd.h>#include <net/if.h>#include <string.h>#include <sys/ioctl.h>#include <stdlib.h>#include <...
2019-06-16 17:46:52 380
原创 SO_REUSERADDR选项作用
套接字选项总结:SO_REUSEADDR:1)SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知的端口,即使以前建立的将该端口用作他们的本地端口的连接仍存在。这个条件通常是这样碰到的:a)启动一个监听服务器,b)连接请求到达,派生一个子进程来处理这个客户c)监听服务器终止,但子进程继续为现有连接上的客户提供服务d)重启监听服务器默认情况下,当监听服务器在步骤d通过调用s...
2019-06-08 17:38:48 1601
原创 最基本网络编程模型
tcp编程最基本模型server: client:socket socketbind connectlisten while(1){acceptwhile(1){ write() read() read() write() }}...
2019-06-08 17:22:24 329
转载 视频最基本知识,持续整理中
I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解...
2019-05-28 23:44:23 312
原创 一些基本网络知识
通过ip地址可以对计算机进行分组管理,AAA.BBB.CCC.YYY。这样一个ip地址,通过把AAA.BBB.CCC部分称为网络部分,把YYY称为主机地址,例如一个ip是202.26.186.174,子网掩码是255.255.255.240.子网掩码的作用是标识ip地址从哪一位到哪一位是网络地址,从哪一位到哪一位是主机地址。把255.255.255.240用二进制表示的话:结果如下所示。1...
2019-05-28 23:31:15 491
转载 四次挥手的相关问题(转载)
当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次挥手”。第一次挥手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了; ...
2019-05-09 22:38:10 123
翻译 惊群效应
服务器进程在程序启动阶段派生N个子进程,它们各自调用accept并因而均被内核投入睡眠。当第一个客户连接到达时,所有N个子进程均被唤醒,这是因为所以N个子进程所用的监听描述符指向同一个socket结构,致使它们在同一个等待通道(wait channel)即这个socket结构的so_timeo成员上进入睡眠。尽管所有N个子进程均被唤醒,其中只有最先运行的子进程获得那个客户连接,其余N-1个子进程继...
2019-05-07 21:39:00 278
原创 c++虚函数
在构造函数和析构函数中调用虚函数不存在多态。看一个例子:class A{ A(void){bar()};void foo(){bar()}virtual void bar(){cout << "A" ;}}class B:public A{void bar(){cout << "B"};}int main(void){ B...
2019-05-07 13:33:44 145
转载 select函数应用示例以及一些网络模型简单介绍
我们看到tcp客户同时处理两个输入:标准输入和tcp套接字。此时程序有了两个焦点,当客户阻塞于标准输入上是,服务器进程被杀死,服务器tcp虽然正确给客户tcp发送了一个fin,但是既然客户进程正阻塞于标准输入读入的过程,它将看不到这个eof,直到从套接字读时为止(可能已经过了很长时间),这样的进程需要一种预先告知内核的能力,使得内核一旦发现进程指定的一个i/o或者多个i/o条件就绪时它就通知进程,...
2019-05-03 19:48:07 228
转载 排序算法为什么需要考虑稳定性
仅仅用执行效率和内存消耗来衡量排序算法的好坏是不够的,针对排序算法,我们还有一个重要的度量指标,稳定性。这个概念就是如果待排序的序列中存在值相同的元素,经过排序之后,相等元素之间原有的先后顺序不变。我来举一个例子说明下:2,9,3,4,8,3。排序后为2 3 3 4 8 9.如果3的前后顺序没有发生变化,那么这种就叫稳定的排序。如果发生变化就叫不稳定排序。举一个实际的例子:要给电商的订...
2019-05-02 22:05:05 1409
原创 写文件的各种标记含义
r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会...
2019-04-25 12:00:52 570
转载 makefile详解。
概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makef...
2019-04-14 21:58:26 191
原创 cgi程序简单原理叙述
Web客户端和服务器之间的交互用的是一个基于文本的应用级协议,叫做HTTP(hypertext transfer protocol)web服务器以两种不同的方式向客户端提供内容:1,取一个磁盘文件,并将它的内容返回给客户端,磁盘文件称为静态内容,而返回文件给客户端的过程称为服务静态内容。2,运行一个可执行文件,并将它的内容返回给客户端,运行时可执行文件产生的输出称为动态内容,而运行程序返回它...
2019-04-14 21:08:26 517
原创 各种sscanf用法,持续更新中
公司代码喜欢sscanf,sprintf等函数,字符串比对确实有大用处,记录下#include <stdio.h>int main(){ char buf[512] = ""; sscanf("123456","%s",buf); printf("buf = %s\n",buf); //123456 sscanf("123456","%4s",...
2019-03-12 19:32:34 265
转载 哈希表
hash表被广泛的用于搜索。设定集合A为搜索对象,集合B为存储位置,利用hash函数将搜索对象与存储位置对应起来。这样,我们就可以通过一次hash,将对象所在位置找到。一种常见的情形是,将集合B设定在数组下标。由于数组可以根据数组下标进行随机存取(random access,算法复杂度为1),所以搜索操作将取决于hash函数的复杂程度。比如我们以人名(字符串)为键值,以数组下标为hash值。每...
2019-02-28 11:18:27 131
原创 二叉树操作(c++)
#include <iostream>using namespace std;// 有序二叉树(二叉搜索树)class Tree {public: // 构造过程中初始化为空树 Tree (void) : m_root (NULL), m_size (0) {} // 析构过程中销毁剩余节点 ~Tree (void) { clea...
2019-02-27 14:12:40 170
转载 如何阅读C/C++中复杂声明(转载)
原创: 上善若水 码农有道 2017-10-09我们经常遇到一些复杂的指针类型说明,很多初学者可能感觉有点蒙,即使是非常有经验的C/C++程序员,也会对那些比较复杂些的声明感到头疼。例如,下面这个是一个包含指针的数组,还是一个指向数组的指针呢int *a[10];好了,这个并不是特别复杂的声明,你可能快速而又准确的说出你的答案:一个含有10个指针的数组。那么,来一个更具挑战性的例子,...
2019-02-26 17:11:21 317
转载 阻塞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 335 1
原创 十进制转换为十六进制
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 1469
原创 前++与后++
区分increment/decrementclass UPInt{public: UPInt& operator++{ *this += 1; return *this; } const UPInt operator++(int){ UPInt old = *this; ++(*this); ...
2019-02-13 17:46:40 392
原创 xargs的作用
xargs命令可以通过管道接受字符串,并将接收到的字符串通过空格分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令,作为后面命令的命令行参数echo '--help' | xargs cat 等价于 cat --help 什么意思呢,就是xargs将其接受的字符串 --help 做成cat的一个命令参数来运行cat命令,同样 echo 'test.c test.cpp'...
2019-01-21 16:38:22 496
原创 windows,linux 回车区别
在Unix系统下执行 换行操作 用“\n” 在windows 操作做系统下执行换行操作 用“\r\n”,如果用Linux打开会出现^M。在Mac操作系统下执行 换行操作用“\r”...
2019-01-04 10:10:46 212
原创 关于fork函数的两个小问题记录下
1,vfork如果调用后没有执行exec,会导致进程非正常退出,所以必须调用exec函数族或者exit2, fork后父进程的文件描述符表(进程级)也会被复制到子进程中,二者共享同一个文件表(内核级,不会复制。类似于dup函数)文件描述符表:进程级 fd flags,file pointers fd 0: fd1:文件表:内核级 ...
2018-12-26 10:03:07 212
原创 回收子进程的两种方法
#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <stdlib.h>#include <pthread.h>#include <errno.h>#include <sys/wait.h>void sigchld(
2018-12-24 10:30:12 868
转载 深入理解inode结构,帮助理解硬链接与软链接,(转载)
一、inode是什么?理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做扇区,每个扇区存储512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。文件数据...
2018-12-05 19:48:54 218
空空如也
ubuntu基于gtk编译的程序在没有安装gtk的机器上可以运行吗
2020-02-16
c语言单线程开启多个定时器,同时去读写同一个文件,需要加锁吗?定时器原理?
2019-05-02
tcp,粘包问题,设置了tcp_nodelay不生效
2019-03-10
SIGCHLD信号处理方式的疑问
2018-12-25
vector的resize方法的一个疑问?
2018-11-27
windows系统文件夹路径问题
2017-11-28
c++ window下动态库调用的问题
2017-11-21
c++ 序列点的问题,懂得进.
2017-11-14
c++ delete释放内存的问题
2017-11-13
c++ vector的异常捕捉问题
2017-11-03
win32,LoadImage函数问题。
2017-07-21
c++,类中类语法,参数类型声明问题
2017-07-20
win32 ,MessageBox 第一个参数置空问题
2017-05-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人