
Linux_C/C++
文章平均质量分 78
HES_C
最求
展开
-
C++模板运用
c++模板的使用翻译 2017-03-15 23:11:29 · 491 阅读 · 0 评论 -
C++定义命名空间
c++自定义命名空间翻译 2017-03-15 23:14:15 · 833 阅读 · 0 评论 -
C/C++函数指针和函数指针数组用法
#include "iostream"using namespace std;void fun2(){ cout<<"this is 2"<<endl;}void fun3(){ cout<<"this is 3"<<endl;}void fun4(){ cout<<"this is 4"<<endl;}int main(){ //方式一 c翻译 2017-04-01 20:10:55 · 1762 阅读 · 0 评论 -
C/C++函数实现接口
#include"iostream"using namespace std;typedef void(*pfun)();void fun1(){ cout<<"this is 1"<<endl;} void fun2(){ cout<<"this is 2"<<endl;}//函数接口void funs(pfun p){ (*p)();}int m翻译 2017-04-01 20:22:40 · 877 阅读 · 0 评论 -
C/C++外部指针访问类内部变量
#include "iostream"using namespace std;class A{ private: int a; public: int b; static int c; const int d=10;}; int A::c=10; int main(){ //方式1,访翻译 2017-04-01 21:47:51 · 1575 阅读 · 0 评论 -
C/C++外部函数指针指向类内部函数
PS:用函数指针访问类内部函数约束1只能访问public和static,virtual#include "iostream"using namespace std;class A{ private: void fun() { cout<<"this is 0"<<endl; } public:翻译 2017-04-01 21:05:37 · 1030 阅读 · 0 评论 -
指针数组和数组指针
指针数组:int *a[3]数组的元素是指针元素表示:*a[i]==*(a[i]) //[] 优先级高于*#include "iostream"#include "cstdlib"using namespace std;int main(){ int *a[3]; int b=1; int c=2; int d=3; a[0]=&b翻译 2017-04-01 23:33:09 · 403 阅读 · 0 评论 -
linux--c++多文件编程
对于面向对象而言,万物皆为对象,对于我们而言对象其实就是一个类,通常呢,我们设计一个类都会有两个文件,×××.cpp和×××.h把每个类型不同的类放在不同的文件中便于修改,便于查看,更具扩展力和直观力,像继承和接口都是不同文件下的类互相产生关系,每个类文件还可以直接给别人使用。好了,多文件编程好处这么多,那么下面我简单的介绍一个实例有一个职员类:employee.hemploy翻译 2017-04-28 10:34:13 · 983 阅读 · 0 评论 -
linux下控制台颜色输出
每当我们打开控制台运行自己的程序时,总是黑白界面是不是很不爽呢。那么有没有让黑白多出一些颜色呢?不用担心,那当然是有的;我们平时敲 ls命令是不是看到过有颜色的字?(有些控制台可能没有)那么下面我给大家提供一个实现的方法:printf("\033[47;31m hello \033[0m");就是这个我们用了几万遍的函数,47是背景颜色 40---49黑,红,绿,黄翻译 2017-05-11 09:35:13 · 2638 阅读 · 0 评论 -
linux下gdb调试
1)在命令行输入gdb,然后进入了gdb的环境下。2)然后输入file 执行文件3)然后我们输入l,就可以罗列出当前代码的信息4)我们看到了main函数,然后通过输入b main在main函数入口处加一个断点b b b * b *b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等翻译 2017-05-13 23:37:33 · 259 阅读 · 0 评论 -
linux-curses界面编程
curses界面编程 initscr();// 制作标准窗口 标准窗口 stdscr WINDOW *derwin(//定义一个自定义窗口 WINDOW *orig, //父窗口 int nlines, int ncols, int begin_y, int begin_x); int box( WINDOW翻译 2017-03-22 17:21:36 · 630 阅读 · 0 评论 -
select,poll,epoll差异
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用转载 2017-04-27 14:10:45 · 459 阅读 · 0 评论 -
epoll—IO多路复用
1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口 epoll操作过程需要三个接口,分别如下:转载 2017-04-27 14:26:56 · 504 阅读 · 0 评论 -
poll-IO多路复用
1、基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。2、poll函数转载 2017-04-27 14:23:11 · 507 阅读 · 0 评论 -
select-IO多路复用
1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用转载 2017-04-27 14:19:16 · 459 阅读 · 0 评论 -
epoll的LT,ET模式
epoll的两种模式LT和ET二者的差异在于level-trigger模式下只要某个socket处于readable/writable状态,无论什么时候进行epoll_wait都会返回该socket;而edge-trigger模式下只有某个socket从unreadable变为readable或从unwritable变为writable时,epoll_wait才会返回该socket。所翻译 2017-04-27 15:03:16 · 641 阅读 · 0 评论 -
linux下制作自己的链接库文件
Linux下有两种库:动态库和静态库(共享库)二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大。动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。不同的应用程序如果调用相同的库,那么在内存中只需要有一份该动态库(共享库)的实例。静态库和动态库的最大区别,静态情况下,把库直接加载到程翻译 2017-06-01 22:33:54 · 460 阅读 · 0 评论 -
判断一个字符串是另一个的子串
#include "stdio.h"#include "string.h"#include "malloc.h"/*--------------------------------------------------------函数名: int str_zi(char *,char *)函数功能: 判断一个字符串是另一个字符串的子串作者: HES输入参数: 父串输出参数: 子原创 2017-08-22 10:09:58 · 10698 阅读 · 0 评论 -
linux-kbhit函数
#include "kbhit.h"#include "stdio.h"#include "termios.h"static struct termios initial_settings,new_settings;static int peek_character=-1;void init_keyboard(){tcgetattr(0,&initial_settings);new翻译 2017-03-23 11:07:59 · 1463 阅读 · 0 评论 -
linux-getch函数
int getch(){struct termios tm,tm_old;int fd=0,ch;if(tcgetattr(fd,&tm)<0){//保存现在的终端设置return -1;}tm_old=tm;cfmakeraw(&tm);//更改终端为原始模式,该模式数据以字节为单位处理if(tcsetattr(fd,TCSANOW,&tm)<0){return -1;}翻译 2017-03-23 11:04:51 · 596 阅读 · 0 评论 -
linux数组清零函数
bzero(buff,20);memset(buff,0,20);//给buff全部置零翻译 2017-03-22 16:28:34 · 2131 阅读 · 0 评论 -
linux操作系统文件IO
linux:文件描述符 整数 如果有文件被某个程序访问。那么程序中就有文件描述符。 进程:一个运行中的程序。 标准输入设备文件 0 标准输出设备文件 1 标准错误输出设备文件 2 这三个设备文件都是终端设备驱动产生的驱动设备文件。 这三个文件描述符都代表终端。 创建一个进程,使用getpid打印进程编号,然后进入/proc/$(pid)/fd目录。ctr翻译 2017-03-22 16:32:46 · 396 阅读 · 0 评论 -
linux-IO和c语言IO
文件操作: C: 文件指针 FILE* 打开文件 fopen 读 fread 写 fwrite 关闭 fclose 改变文件内容指针 fseek SEEK_SET SEEK_CUR SEEK_END 在关闭时才修改文件 linux: 文件描述符号 fd 整数 打开转载 2017-03-22 16:38:25 · 264 阅读 · 0 评论 -
linux目录操作
目录:目录文件 文件中保存:字符文本 二进制 目录文件中保存:文件名打开目录:opendir 进程获取了硬盘中一个区域的访问权限并映射到内存中。 #include #include DIR *opendir(const char *name); DIR *fdopendir(int fd);//ioctl翻译 2017-03-22 16:46:23 · 247 阅读 · 0 评论 -
linux内存与虚拟内存
linux支持虚拟内存: 内存:内存条 物理内存 实际存在 程序中的内存 虚拟内存 os映射出来的 直接映射 文件映射 提速: 文件io操作 耗时长 内存操作 耗时短 mmap函数可以把文件映射成虚拟内存,像操作内存一样去操作文件。 mmap函数可以直接映射一块虚拟内存。 #include voi翻译 2017-03-22 17:07:04 · 524 阅读 · 0 评论 -
linux多进程使用
init进程是所有进程的父或者祖父 进程的组成: 用户 id CPU时间片 内存 状态 时钟 优先级 源程序 fd 。。。。。 进程的状态:man ps PROCESS STATE CODES R 运行或可运行 D 不可中断睡眠 S 可中断睡眠 T 挂起 暂停 等待 X 死亡 Z 僵尸(已经结束但依然占据进程翻译 2017-03-22 17:14:37 · 410 阅读 · 0 评论 -
linux多进程通讯
#include #include #include #include int main(){ int d; int *p = NULL; int ch; initscr();// 制作标准窗口 keypad(stdscr,true); curs_set(0);//设置光标透明度为100 WINDOW* w = derwin(stdscr,3,9,LINES/2-1,COL翻译 2017-03-22 17:17:33 · 336 阅读 · 0 评论 -
IPC:internet process connection(进程通信技术)
数据交换: 虚拟内存映射 mmap 普通文件 reg file 管道 pipe 共享内存 share memory shm 消息队列 message queue msg 套接字 socket 同步: 信号 signal 旗语翻译 2017-03-23 09:58:13 · 686 阅读 · 0 评论 -
linux管道
匿名管道: pipe #include int pipe( int filedes[2]); 1.创建描述符数组 2.把描述符数组变成管道 3.创建父子进程 4.父子进程分别读写描述符号。#include #include int main(){ int fds[2];翻译 2017-03-23 10:08:48 · 279 阅读 · 0 评论 -
linux管道双工聊天
A#include "stdio.h"#include "pthread.h"#include "string.h"#include char fileout[20] = "fio.pipe";char fileint[20] = "fii.pipe"; int r; int fd1; int fd2;int p1=0; int flag=0;翻译 2017-03-23 10:11:17 · 542 阅读 · 0 评论 -
linux信号
信号就是一个整数。 linux操作系统的信号共有64个。 32个 不可重用信号 有固定含义 32个 可重复 可设置意义 信号发送者:信号源 shell kernel 进程 硬件驱动程序 信号接收者: shell kernel 进程 硬件驱动程序 接收到信号后:每个信号定义了一种含义,接收到信号后会自动做对应的操作。 可以自定义信号处翻译 2017-03-23 10:24:18 · 269 阅读 · 0 评论 -
linux信号含义
#define SIGHUP 1 进程由於控制终端死去或者控制终端发出挂起命令 #define SIGINT 2 键盘中断所产生的信号 ctrl C#define SIGQUIT 3 键盘终止 ctrl \#define SIGILL 4 非法的指令 #define SIGTRAP 5 进程遇到一个追踪(t翻译 2017-03-23 10:25:30 · 315 阅读 · 0 评论 -
linux进程和子进程获取进程号
#include int main(){ printf("当前进程id:%d\n",getpid()); int t; if(t = fork()){ printf("我是父进程,我的子进程id为:%d\n",t); }else{ printf("我是子进程,我的id是:%d\n",getpid()); printf("我是子进程,我的父进程id是:%d\n"翻译 2017-03-23 10:29:09 · 3739 阅读 · 1 评论 -
linux高级信号发送和接收(附带消息)
高级信号发送和接收 sigaction 1.可以让信号处理函数屏蔽信号集 2.可以让信号处理函数在信号响应的同时接收信号源进程信息和附带消息。 sigqueue 可以发送信号并同时发送附带消息。 使用kill函数发送信号,sigaction可以接收到信号发送者的信息,但不能接收到附带消息。 int sigqueue( pid_t pid,//进程id翻译 2017-03-23 10:41:01 · 1898 阅读 · 0 评论 -
linux共享内存
共享内存:开辟一块内存,同一主机上的进程可以访问。 编程模型 A B 创建key ftok 创建key 创建共享内存 shmget 获取共享内存 挂载共享内存 shmat 挂载共享内存 使用共享内存 *p 使用共享内存 卸载共享内存 shmdt 卸载共享内存 获取共享内存状态 shmctl 删除共享内存 shmctl 创翻译 2017-03-23 10:45:18 · 609 阅读 · 0 评论 -
linux消息队列
共享内存: 双工 数据流 数据无边界 数据无序 保存最后一个数据 消息队列,共享队列:本质还是共享内存 消息队列中的消息是结构体。 编程模型: A B 定义接收结构体 msgbuf 定义发送结构体 制作msg 创建key 创建key 创建msgq msgget 设置msgq msgctl翻译 2017-03-23 10:51:32 · 507 阅读 · 0 评论 -
linux旗语
旗语:信号量 本质为一个整型数组 整数本身无意义,通过对数的数值检测后不同的操作来实现同步。 semaphore operations 旗语操作 A B semop semop 编程模型 A B 创建key ftok 创建key 创建sem semget 得到旗语 初始化s翻译 2017-03-23 10:56:32 · 853 阅读 · 0 评论 -
C语言枚举内存占用
enum 枚举是一个C语言比较常用的一个类型,是节约内存的一种方式,一般用来表示类型,类型之类的作用。为什么说enum能节约内存呢? 这个就和enum的内存分配有关系了。 首先先看实验现象:实验1:实验1结果:这里可以看到这个枚举只占用了1个字节。实验2:实验2结果:这里可以看到还是一个字节实验3:实验3结果:这里可...原创 2019-03-19 18:04:36 · 10374 阅读 · 9 评论