c/c++
文章平均质量分 67
坚持就有希望
他强任他强,我是路人王!
展开
-
linux socket遇到的一些常见函数
ioctl用法详解:https://blog.csdn.net/linglongqiongge/article/details/47298227linux c语言 fork() 和 exec 函数的简介和用法https://www.cnblogs.com/dongguolei/p/8098181.html(笔记)Linux下的ioctl()函数详解https://www....原创 2020-03-23 08:22:15 · 111 阅读 · 0 评论 -
编译c或c++代码出现error “***” was not declared in this scope 的解决方法
C++ 中error: ‘exit’ was not declared in this scope 的解决方法添加头文件#include <cstdlib>error: ‘inet_ntoa’ was not declared in this scope#define _BSD_SOURCE#include <sys/socket.h>#includ...原创 2020-03-23 08:22:02 · 18301 阅读 · 0 评论 -
Socket 心跳包机制总结
跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。 在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。...原创 2020-03-23 08:21:22 · 869 阅读 · 0 评论 -
linux实现socket多线程通信
参看:https://blog.csdn.net/shine_journey/article/details/72641313https://blog.csdn.net/sfrysh/article/details/5724012https://blog.csdn.net/weixin_30583563/article/details/97173535https://bbs.csdn....原创 2020-03-23 08:18:45 · 351 阅读 · 0 评论 -
C语言system函数
我们今天来看看在windows操作系统下system () 函数详解(主要是在C语言中的应用)注意:在windows下的system函数中命令可以不区别大小写!函数名: system功 能: 发出一个DOS命令用 法: int system(char *command);system函数已经被收录在标准c库中,可以直接调用。例如:#include<stdio.h>...原创 2020-03-23 08:09:11 · 404 阅读 · 0 评论 -
puts和fputs函数及其区别,C语言puts和fputs函数详解
与 gets 函数一样,对于 puts 函数,同样建议使用 fputs 函数来代替 puts 函数。如下面的示例代码所示:int main(void){ char buffer[11]; fgets(buffer,11,stdin); fputs(buffer,stdout); return 0;}其中,puts 函数的原型如下所示:int puts(...原创 2020-03-23 08:01:44 · 578 阅读 · 0 评论 -
Linux环境下如何编译C++程序
前言前段时间面试C++开发,总是被问其Linux编程.虽然申请的不是服务器开发岗,但是都毫无例外的问我Linux,看来真的挺重要的.虽然找工作已经告一段落了,但是学习不应该停下脚步。趁着现在时间比较自由,恶补一波Linux吧。从第一个小程序开始。Hello,Linux!打开终端,输入指令[jason@localhost ~]$ vim hello.cpp1会进入一个vim编...原创 2020-03-23 08:00:16 · 327 阅读 · 0 评论 -
unix socket实现网卡接口多线程监控 rx_packets, tx_packets, rx_errs, tx_errs等数据
废话不多说,直接上代码:客户端:#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include &...原创 2020-03-23 07:51:53 · 1276 阅读 · 0 评论 -
Linux下的延迟函数sleep()
Linux下c语言中的延迟函数sleep()的用法#include <stdio.h>int main(){ printf("hello\n"); sleep(1); //延迟1秒 printf("world\n"); return 0;}windows下 sleep(1000) 代表延迟1秒,因为sleep的参数为毫秒,...原创 2020-03-22 19:16:59 · 644 阅读 · 0 评论 -
如何使用printf格式化unsigned long long int?
将ll(el-el)long-long修饰符与u(无符号)转换一起使用。(在Windows,GNU中运行)。printf("%llu", 285212672);原创 2020-03-21 21:27:38 · 17572 阅读 · 0 评论 -
sscanf函数用法详解
以前一直以为sscanf只能用来简单的提取用空格隔起来的字符串,知道之前遇到了一些列字符串处理问题,详细研究起来这个函数尽然还是有很强大的有很多类似于正则表达式的功能。首先我们先来看函数定义:定义函数 int sscanf (const char *str,const char * format,........); 函数说明 ...转载 2020-03-21 21:27:01 · 6794 阅读 · 3 评论 -
fork和exec的区别
1、fork() 一个程序一调用fork函数,系统就为一个新的进程准备了前述三个段,首先,系统让新的进程与旧的进程使用同一个代码段,因为它们的程序还是相同的,对于数据段和堆栈段,系统则复制一份给新的进程,这样,父进程的所有数据都可以留给子进程,但是,子进程一旦开始运行,虽然它继承了父进程的一切数据,但实际上数据却已经分开,相互之间不再有影响了,也就是说,它们之间不再共享任何数据了。而如果...原创 2020-03-21 20:58:01 · 668 阅读 · 0 评论 -
socket开发中INADDR_ANY"的含义是什么?
"将sin_addr设置为INADDR_ANY"的含义是什么?INADDR_ANY转换过来就是0.0.0.0,泛指本机的意思,也就是表示本机的所有IP,因为有些机子不止一块网卡,多网卡的情况下,这个就表示所有网卡ip地址的意思。比如一台电脑有3块网卡,分别连接三个网络,那么这台电脑就有3个ip地址了,如果某个应用程序需要监听某个端口,那他要监听哪个网卡地址的端口呢?如果绑定某个具体的ip...原创 2020-03-21 20:45:48 · 178 阅读 · 0 评论 -
关于AF_INET和PF_INET 的区别
在写网络程序的时候,建立TCP socket: sock = socket(PF_INET, SOCK_STREAM, 0);然后在绑定本地地址或连接远程地址时需要初始化sockaddr_in结构,其中指定address family时一般设置为AF_INET,即使用IP。相关头文件中的定义: AF = Address Family...原创 2020-03-21 20:46:19 · 487 阅读 · 0 评论 -
QT中信号和槽的简单解释
思想介绍为:一.信号当对象的内部状态发生改变,信号就被发射。只有定义了一个信号的类和它的子类才能发射这个信号。信号的声明是在头文件中进行的,QT的signals关键字指出进入了信号声明区,随后即可声明自己的信号。信号由moc自动生成,所以不需要在cpp中定义,只需要声明。二.槽槽是普通的 C++ 成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。当与其关联的信号被...原创 2020-02-07 12:38:37 · 1032 阅读 · 0 评论 -
找出数组中重复的数据c++实现
给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 解题思路:由于所有元素限定在1到n之间,所以可以先交换第i个元素与第nums[i] - 1个元素的位置,然后遍历nums数组判断是否与[1....n]一致,不一致表明元素重复;...原创 2018-09-29 09:59:36 · 6243 阅读 · 1 评论 -
如何理解typedef void (*funcptr)(void)
这里是定义了一个指向参数为空,返回值为空的函数的指针类型。概念理解:typedef 只对已有的类型进行别名定义,不产生新的类型;#define 只是在预处理过程对代码进行简单的替换。清晰了解两个概念后,发现它们就是两个不同的概念,并没有太多的联系。 类比理解:typedef unsigned int UINT32; // UINT32 类型是unsigned ...原创 2018-11-15 07:33:37 · 4176 阅读 · 0 评论 -
#inndef与#pragma once区别
为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #endif ...原创 2018-11-15 07:38:37 · 298 阅读 · 0 评论 -
c++中的byte类型
c++中没有byte类型,替代的方法是使用unsigned char a[3],可以当作字节数组使用原创 2018-11-15 07:42:52 · 44959 阅读 · 1 评论 -
c++中struct与class区别
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!! 既然这些它都能实现,那它和class还能有什么区别?最本质的一个区别就是默认的访问控制: 默认的继承访问权限struct是public的,class是...转载 2018-11-15 07:45:29 · 221 阅读 · 0 评论 -
void类型和void* 的用法
C语言中的void 和 void * 总结1、void的作用 c语言中,void为“不确定类型”,不可以用void来声明变量。如:void a = 10;如果出现这样语句编译器会报错:variable or field ‘a’ declared void。 在C语言中void 常常用于:对函数返回类型的限定和对函数参数限定 (1)对函数返回类型的限定:当函数不需要返回类...原创 2018-11-15 07:55:57 · 198 阅读 · 0 评论 -
c++开发学习思路
由于C++是一门非跨平台语言,其开发的程序编译生成的可执行文件,只能在相应的操作系统中被执行,离开此系统环境将无法执行。主要原因是不同的操作系统,可执行文件的结构不同,最为常见的操作系统是有:MAC,windows,linux,unix。。。。其中windows下为早期为DOS结构,之后随着窗口系统的发展改为PE,而linux,以及unix其可执行文件结构为elf。 本文只是刚开...转载 2018-11-15 08:05:44 · 780 阅读 · 0 评论 -
snprintf用法
众所周知,sprintf不能检查目标字符串的长度,可能造成众多安全问题,所以都会推荐使用snprintf. 自从snprintf代替了sprintf,相信大家对snprintf的使用都不会少,函数定义如下:int snprintf(char*str, size_t size,constchar*format, ...); 函数说明:最多从源串中拷贝size-1个字符到目标串...转载 2018-12-02 09:43:45 · 1587 阅读 · 0 评论 -
fprintf
头文件:#include <stdio.h>定义函数:int fprintf(FILE * stream, const char * format, ...);函数说明:fprintf()会根据参数format 字符串来转换并格式化数据, 然后将结果输出到参数stream 指定的文件中, 直到出现字符串结束('\0')为止。返回值:关于参数format 字符串的格式请参考print...转载 2018-12-02 09:47:56 · 353 阅读 · 0 评论 -
信号量sem_init,sem_wait,sem_post
一、什么是信号量线程的信号量与进程间通信中使用的信号量的概念是一样,它是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行。而只有0和1两种取值的信号量叫做二进制信号量,在这里将重点介绍。而信号量一般常用于保护一段代码,使其每次只被一个执行线程运行。我们可以使用二进制信号量来完成这个工作。...转载 2018-12-07 07:40:17 · 924 阅读 · 0 评论 -
C语言中的位屏蔽(bit masking)
位屏蔽的含义是从包含多个位集的一个或一组字节中选出指定的一(些)位。为了检查一个字节中的某些位,可以让这个字节和屏蔽字(bit mask)进行按位与操作(C的按位与运算符为&)——屏蔽字中与要检查的位对应的位全部为1,而其余的位(被屏蔽的位)全部为0。例如,为了检查变量flags的最低位,你可以让flags和最低位的屏蔽字进行按位与操作:flags&1;为了置位所需的位,可以让数据和屏...原创 2018-12-19 08:00:58 · 3550 阅读 · 0 评论 -
c++全局指针与类成员指针
c++非类成员函数指针定义 void (*pfun)( void);为了叙述方便,先定义一个类:class A{void (*pAfun)( void);};A类的成员数据pAfun和void (*pfun)( void)类型是不同的,pAfun的类型是 void(A::*)(void),pfun的类型是void (*)(void).但是能否进行强制转换呢?答案...转载 2018-11-15 07:31:10 · 2146 阅读 · 0 评论 -
c++创建对象的三种方式
c++创建对象的三种方式如下:A a(1); //栈中分配 A b = A(1); //栈中分配 A* c = new A(1); //堆中分配 第一种和第二种没什么区别,一个隐式调用,一个显式调用,两者都是在进程虚拟地址空间中的栈中分配内存,而第三种使用了new,在堆中分配了内存,而栈中内存的分配和释放是由系统管理,而堆中内存的分配和释放必须由程序员手动释放。采用第三种方式时...原创 2018-11-15 07:29:34 · 318 阅读 · 0 评论 -
动态库与静态库详解
C++静态库与动态库这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。...转载 2018-10-19 20:17:19 · 372 阅读 · 0 评论 -
android源码c++代码都加了namespace android原因
在AOSP的源码里面我们经常可以看到这样的代码:namespace android {//源码//源码};// namespace androidnamespace是CPP的关键字,用于声明代码块所属的命名空间,AOSP底层的本地代码把声明了命令空间“android”,把所有的“android”代码都看成一个工程了,这样做的好处是把自己的代码与第三方开源的代码区分开来,同...原创 2018-10-19 19:37:31 · 3843 阅读 · 0 评论 -
int *f ( ) 和 int (*f) ( )的区别
int *f()表示这个函数的功能是:返回一个地址.int(*f)():表示 这是一个函数的指针.它要指向一个函数才能有用.指向一个函数之后可以用它来代替该函数.之后使用这个指针相当于使用该函数.int *a[];是一个指针数组啦...表示数组中的每一个元素都是一个指针,可以指向一个int类型的数值.int (*a)[]这是一个指向多维数组的指针变量.如: int (*p)[100]; 则...原创 2018-10-19 19:31:28 · 14087 阅读 · 1 评论 -
三角形最小路径和c++实现
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。...原创 2018-09-29 12:48:52 · 780 阅读 · 0 评论 -
c++中size_t与ssize_t详解
----------------------------------size_t--------------------------------------size_t是一些C/C++标准在stddef.h中定义的。这个类型足以用来表示对象的大小。size_t的真实类型与操作系统有关,在32位架构中被普遍定义为:typedef unsigned int size_t;而在64位...转载 2018-10-14 18:11:05 · 5668 阅读 · 0 评论 -
c++容器总结
一、容器的定义 在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列处理“其它对象”的方法。二、容器的种类 1、顺序容器:是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改...转载 2018-09-29 10:41:21 · 254 阅读 · 0 评论 -
c++基础学习疑难点
^ 与 ~区别void*作用,返回任意类型的指针条件编译如下:#ifdef 标识符 程序段1 #else 程序段2 #endif sizeof(a):返回变量的大小,:逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。.或者->:成员运算符用于引用类、结构和共用体的成员强制转换运算符把一种数据类型转换为...原创 2018-09-28 13:22:13 · 191 阅读 · 0 评论 -
c++中->与.调用区别
这两个符号都是C++成员运算符,主要用于确定类对象和成员之间的关系,用于引用类、结构和共用体的成员。点运算符“.”应用于实际的对象,箭头运算符“->”与一个指针对象的指针一起使用。也就是说:如果直接对象访问成员就用.,如果是通过对象的指针访问成员就用->...原创 2018-09-28 12:38:37 · 567 阅读 · 0 评论 -
c++中::作用
初学c++对::做一个总结:作用域限定符,当在类体中直接定义函数时,不需要在函数名字的前面加上类名,但是在类体外实现函数定义的时候,必须加上类名并且加上作用域限定符。Student::Display(); 静态数据成员既可以通过对象名引用,也可以通过类名加::来引用,Test::a;class Test{ public: Display(); privat...原创 2018-09-28 11:24:28 · 702 阅读 · 0 评论 -
c++互斥锁mutex使用简介
1. 多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁)。引用 cppreference 的介绍: 1 The mutex class is a synchronization primitive that can be used to protect shared data from being simultaneousl...转载 2018-10-02 17:28:46 · 2896 阅读 · 0 评论 -
c/c++联合体(union)本质
有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判断,温故知新。 1.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:结构体(struct)中所有变量是“共存”的...原创 2018-10-02 16:52:19 · 2165 阅读 · 0 评论 -
memset函数作用
void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。 memset(dev, 0, sizeof(struct hello_device_t));将dev分配的内存的前sizeof(struct hello_device_t)大小的字节初始化为0 ...原创 2018-10-20 11:06:38 · 230 阅读 · 0 评论