展开

关键词

Linux C之网络

简介本章主要讲解网络的基础知识,主要包括七层网络模型、常用通信协议、IP地址与子网掩码及端口号、字节序。七层网络模型讲到网络首先说一下最常见的网络模型,七层网络模型。 子网掩码:主要用于划分IP地址中的网络地址和主机地址,也可以判断两个IP地址是否在同一个局域网中,具体的划分方法如下:IP地址 & 子网掩码 => 网络地址 + 主机地址网络中需要提供: IP地址 ,但是其中0 ~ 1024之间的端口号被系统占用,因此以后时建议从1025开始使用。 :0x12 0x34 0x56 0x78一般来说,在网络中需要将所有发送到网络中的多字节整数先转换为网络字节序再发送,将所有从网络中接收过来的多字节整数先转换为主机字节序再解析,而网络字节序本质就是大端系统的字节序 总结:以上概念都是网络中最常见最基础的知识点,这些都需要大家掌握。另预告一下,下一章将讲解非常重要的SOCKET网络,希望大家多多关注。

50390

(机器、汇

机器  直接对硬件操作的,由多个0、1构成的。是低级底层。汇  汇同机器一样直接对硬件操作。  汇虽麻烦,但是所能完成的操作不是一般能够实现的。 且生成的可执行文件小,执行速度快  制的序不能直接被计算机识别,必须经过转换才能执行。   按转换方式又分为以下两类:译类和解释类译类(CC++) 译类全篇译,生成可执行文件,执行的是译生成的可执行文件。   序执行效率、依赖译器、跨平台性差解释类(Python、Java、PHP、Ruby等)  序源码边译边执行,逐行译,不能生成可独立执行的文件。  但是这种方式可以灵活调整更改。 总结:  机器  优点是最底层,速度最快,缺点是最复杂,开发效率最低  汇  优点是比较底层,速度最快,缺点是复杂,开发效率最低    译型执行速度快,不依赖环境运行,跨平台差

70810
  • 广告
    关闭

    云产品限时秒杀

    云服务器1核2G首年38元,还有多款热门云产品满足您的上云需求

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C第1课——socket+c++,c

    2.套接字(socket)在网络中用来描述计算机中不同序与其他计算机序的通信方式。socket其实是一种特殊的IO接口,也是一种文件描述符。 这三个参数用以区分不同应用序进间的网络通信与连接。套接字的数据结构:C进行套接字时,常会使用到sockaddr数据类型和sockaddr_in数据类型,用于保存套接字信息。 该字节数组的作用只是为了让两种数据结构大小相同而保留的空字节 unsigned char sin_zero } 对于sockaddr,大部分的情况下只是用于bind,connect,recvfrom,sendto等函数的参数,指明地址信息,在一般

    29810

    C与代码优化

    来源:公众号(c与cpp)在本篇文章中,我收集了很多经验和方法。应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C代码。 应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C代码。尽管在C代码优化方面有很多的指南,但是关于译和你使用的机器方面的优化知识却很少。 通常,为了让你的序运行的更快,序的代码量可能需要增加。代码量的增加又可能会对序的复杂度和可读性带来不利的影响。这对于在机、PDA等对于内存使用有很多限制的小型设备上序时是不被允许的。 C中,处理器中的N和Z标志位与下面的指令联系在一起:有符号关系运算x=0,x==0,x!=0;无符号关系运算x==0,x!=0(或者x>0)。 C没有借位和溢出位的概念,因此,如果不借助汇,不可能直接使用借位标志C和溢出位标志V。

    45310

    C笔记】C译的过

    1、前如果你使用的是集成开发环境,那么你点击译按钮就可生成可执行文件,然后点击运行即可运行。那么,你知道从源代码到可执行文件经历了哪些过吗。仅仅是译? n); return 0;}其经历如下过:?如图,译生成可执行文件的过实际包含四个过:(1)预处理;(2)译;(3)汇;(4)链接。 译的命令为:gcc -S test.i -o test.s上述命令中-S让译器在译之后停止,不进行后续过;-o是指定输出文件名。汇文件test.s是文本文件,部分内容截图如下:? 汇的命令为:gcc -c test.s -o test.o上述命令中-c、-o让汇器把汇文件test.s转换成目标文件test.o。目标文件test.o是二进制文件,部分内容截图如下:? 链接过的命令为:gcc test.o -o test.exe综上,生成可执行序过为:预处理、译、汇、链接。各个命令如下图所示:?

    35830

    聊聊C-序和

    前几天看到新闻说是美国总统奥巴马写代码并且鼓励全部的美国人都应该学习,一时成了人们热议的话题。那么小接下来将要写一个系列的文章来带你进入C的奇妙世界。 什么是简单来说就是用计算机能够识别的序。我们平时用的电脑、平板、机、电机、计算机以及工厂用的各种设备无一不包含序。? 后来人们为了解决这件苦逼的事情发明了很多种(也叫形式)。?上面这幅图展现了人们发明的大多数,但是并不包含全部。我们现在用的序基本都是用这些写的。 只有经过译或者解释完后,我们的序才能在计算机或者其他设备上运行。经历的过如下:?为什么选择C? 既然有那么多的我们为什么选择C序呢,也许是小C有着独有的情怀吧,也许是因为我们上过大学的人基本上学的第一门都是C吧,也许它是至今为止用的最多的和底层硬件打交道的

    71680

    C译过

    代表接下来的文本应该被当做包含一个隐式的extern C译1.->汇代码命令 gcc -S a.i -o a.s .file a.c .globl _N .data .align 4_N 链接使用到了C标准库的东西“printf”,但是译过只是把源文件翻译成二进制而已,这个二进制还不能直接执行,这个时候就需要做一个动作,将翻译成的二进制与需要用到库绑定在一块。 动态库与之相反,在译链接时并没有把库文件的代码加入到可执行文件中,而是在序执行时由运行时链接文件加载库,这样可以节省系统的开销。 usrlib有关环境变量:LIBRARY_PATH环境变量:指定序静态链接库文件搜索路径 LD_LIBRARY_PATH环境变量:指定序动态链接库文件搜索路径说下生成静态库的方法: ar cr libxxx.a -o libxxx.so 也可以分成两部来写: gcc -fPIC file1.c -c 这一步生成file1.o gcc -shared file1.o -o libtest.so

    53320

    C规范

    2018 10 图片来源于网络C入门到精通公众号闫小林C是一门朴素的,它是大部分序员的入门,那么C的常见规范都有哪些呢1头文件: 1.头文件中适合放置接口的声明,不适合放置实现 2 (任意一个头文件均可独立译) 7.禁止在externC中包含头文件 8.禁止在头文件中定义变量,如果头文件被其他文件包含,会引发重复定义 9.只能通过包含头文件的方式使用其他.c提供的接口,禁止在.c 中通过extern的方式使用外部函数接口、变量 10.如果一个模块包含多个子模块,则建议每一个子模块提供一个对外的.h,文件名为子模块名,降低接口使用者的写难度2 码: 1.函数不变参数使用const memcpymemset时一定要确保长度不要越界 2.字符串考虑最后的0,确保所有字符串是以0结束 3.指针加减操作时,考虑指针类型长度 4.数组下标进行检查 5.使用时sizeof或者strlen计算结构字符串长度,避免工计算 C入门到精通 4禁止内存泄漏: 1.异常出口处检查内存、定时器文件句柄Socket队列信号量GUI等资源是否全部释放 2.删除结构指针时,必须从底层向上层顺序删除 3.使用指针数组时,确保在释放数组时

    1.1K3129

    C译过

    如果用一张图来表示:image.png译,序读取源序(字符流),对之进行词法和法的分析,将指令转换为功能等效的汇代码,再由汇序转换为机器,并且按照操作系统对可执行文件格式的要求链接生成可执行序 采用头文件的目的主要是为了使某些定义可以供多个不同的C序使用。因为在需要用到这些定义的C序中,只需加上一条#include句即可,而不必再在此文件中将这些定义重复一遍。 如数字、字符串、变量的定义,以及C的关键字,如main,if,else,for,while,{,},+,-,*,,等等。 经过优化得到的汇代码必须经过汇序的汇转换成相应的机器指令,方可能被机器执行。4.汇实际上指把汇代码翻译成目标机器指令的过。 对于被翻译系统处理的每一个C序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源序等效的目标的机器代码。目标文件由段组成。

    55320

    初识 C#

    一些共性的基础知识拷贝于菜鸟教,但进行了相应的删减和改动并加入了自己的理解。C#及特点   c#(读作”see sharp“)看看我们的多锋利!!!    C++有两个”++”,C#有四个,哈哈哈哈!!! C#是微软公司开发的一种面向对象的、运行于.NET Framenwork和.NET Core(完全开源、跨平台)之上的序设计C#是一种安全的、稳定的、简单的、优雅的、由CC++衍生出来的面向对象的。他继承了CC++强大的功能的同时去掉了一些复杂特性,完善了CC++的缺点和不足。. C#和.NET的关系  .NET 是一个开发平台,而 C# 是一种在 .NET 开发平台上使用的类似于舞台和表演者的关系,C#是这个舞台上最闪耀的表演者! 面向对象的概念 我是从C开始入门学习的,目前还没有系统学习过C++或者JAVA,C#是面向对象的,在这里需要简单的学习一下面向对象的哲学理念。 面向过——>怎么做?

    3620

    C-文件

    文件函数介绍如果在Linux系统下学习C,就会了解到两套文件接口函数:C标准的文件函数: fopen*、fread、fwrite、*fcloseLinux下提供的文件函数: open C标准库提供的文件函数下面介绍C标准库提供的文件函数,一般对文件常用的操作就是:创建(打开)、读、写、关闭。其他的函数用法同理,只要把这4个函数学会了,基本的文件操作已经可以完成了。 Linux下的系统函数: 文件函数Linux下也有一套系统函数,用于文件操作,这些函数在Linux下常用于读写设备文件;当然,读写普通文件也是一样,普通文件也是磁盘上的数据,也是操作块设备驱动。

    5930

    C系列】C译流分析

    前几天看了《序员的自我修养——链接、装载与库》中的第二章“译和链接”,主要根据其中的内容简单总结一下C译的过吧。 译(Compilation)译过就是把预处理完的文件进行一系列的词法分析,法分析,义分析及优化后生成相应的汇代码。 汇(Assembly)汇器是将汇代码转变成机器可以执行的命令,每一个汇句几乎都对应一条机器指令。汇相对于译过比较简单,根据汇指令和机器指令的对照表一一翻译即可。 helloworld的大体译和链接过就是这样了,那么译器和链接器到底做了什么呢?译过可分为6步:扫描(词法分析)、法分析、义分析、源代码优化、代码生成、目标代码优化。 义分析:静态义(在译器可以确定的义)、动态义(只能在运行期才能确定的义)。

    57350

    CC加加基础入门,学习之嵌入式系统,修炼之幕操作

    全文目录:C嵌入式系统修炼之道——背景篇C嵌入式系统修炼之道——软件架构篇1.模块划分2.多任务还是单任务3.单任务序典型架构4.中断服务序5.硬件驱动模块6.C的面向对象化总结C嵌入式系统修炼之道 ——内存操作篇1.数据指针2.函数指针3.数组vs.动态申请4.关键字const5.关键字volatile6.CPU字长与存储器位宽不一致处理总结C嵌入式系统修炼之道——幕操作篇1.汉字处理2 .系统时间显示3.动画显示4.菜单操作5.模拟MessageBox函数总结C嵌入式系统修炼之道——键盘操作篇1.处理功能键2.处理数字键3.整理用户输入总结C嵌入式系统修炼之道——性能优化篇 当然,在C++里,static具有了更加强大的威力,它使得某些数据和函数脱离对象而成为类的一部分,正是它的这一特点,成就了软件的无数优秀设计。 幕乃嵌入式系统生存之重要辅助,面目可憎之显示将另用户逃之夭夭。若处理不好,将是软件中最不系统、最混乱的部分,笔者曾深受其害。

    45270

    CC++基本风格

    初学者阶段时,写基本句可能会有隐含错误的方式,基本句主要针对if、for、while、goto、switch等,它们看似简单,但使用时隐患比较多,本文归纳了使用句的一些规则和建议。 基本举例 if句if句是C++C中最简单、最常用的句,然而很多人员用隐含错误的方式写if句,本文以“与零值比较”为例,进行讨论。 根据布尔类型的义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE的值究竟是什么并没有统一的标准,例如VC++将TRUE定义为1,而VB则将TRUE定义为-1。 假设布尔变量名为flag,它与零值比较的标准if句如下if(flag)表示flag为真if(! 假设整型变量的名字为value,它与零值比较的标准if句如下:if(value == 0)if(value != 0)不可以模仿布尔变量的风格而写成:if(value)if(!

    12910

    世界最强的C

    1.C数据类型char:字符型,用来存储小范围的整数(-128~127)和字符(所有的ASCII字符,128个),一个字节。int:整数型,用来存储整数,四个字节。 2.变量是内存中的一块存储空间,用于保存序运行时变化的数据。内存储存单位是字节,一个字节包含8位二进制。 小推荐一个学CC++的学习裙【 六二七,零一二,四六四 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享! 3.变量的定义法: 变量类型 变量名;变量保存在内存中变量就像一个“盒子”变量名就是盒子的名称变量的值就是盒子中的东西4.scanf函数输入机制%d, %f, %lf 以空白字符为间隔。 ,经常会分享一些CC++技术相关的干货;如果你喜欢我的分享,可以用微信搜索“C学习部落”关注。

    48820

    C荣获2019年度

    TIOBE网站此前发布2018年度是python,本以为2019年度依然会是它,可是最后却是C夺得2019年度。 这次C年增长2.4%,第二名是C#(+2.1%)、Python(+1.4%)和Swift(+0.6%)。为什么C仍然很流行? C在应用于性能关键的小型设备时表现出色。它很容易学习,而且每个处理器都有一个C译器。  这几年由于设备单位算力的提升,导致脚本大放异彩。 随着设备运算能力的进一步提升意味着脚本与非脚本的性能差距将会进一步扩大,预测5-10年内静态(特别是C++)将会再次强大!  TIOBE网站统计的Top20。 ?

    23710

    多线C

    线的概念什么是多线,提出这个问题的时候,我还是很老实的拿出操作系统的书,按着上面的话敲下“为了减少进切换和创建开销,提执行效率和节省资源,我们引入了线的概念,与进相比较,线是CPU调度的一个基本单位 当 Linux 最初开发时,在内核中并不能真正支持线。那为什么要使用多线?使用多线的理由之一是和进相比,它是一种非常节俭的多任务操作方式。 运行于一个进中的多个线,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线所花费的空间远远小于启动一个进所花费的空间,而且,线间彼此切换所需的时间也远远小于进间切换所需要的时间。 那么线是干什么的呢?简要概括下线的职责:线序中完成一个独立任务的完整执行序列。 两个读线,两个写线,当写线抢到锁之后,读取用户输入(有人在写),这个时候其他读写锁都不能锁定,当用户输入完之后,其他线抢锁,读线抢到锁之后,只有另一个读线才可以抢到锁,写线不可以抢到锁。

    17020

    序员C快速上——级篇(十)

    级篇内存管理内存四区内存分配动态内存管理指针级二维数组二级指针函数指针函数指针的声明函数指针的赋值与使用函数指针的传递void*指针级篇 内存管理 C序加载到内存中,通常可人为划分为栈(stack 堆(heap)堆内存由序员动分配、动释放,如果不释放,只有当序运行结束后,操作系统才会去回收这片内存。C所谓的动态内存管理,指的就是堆内存管理,这也是C内存管理的核心内容。 而在Python、JavaScript等中,当前流行的函数式范式,即将一个函数作为参数传入到另一函数中执行,实际上有些古老的C中早就能实现了。 接触过Java等具有泛型的面向对象的人,可能马上就会联想到泛型,是的,C没有泛型,但是利用void*指针的特点,我们可以使用一些技巧来模拟泛型。 像Java这样的存在泛型,我们可以定义泛型,而不需要在函数声明时指定具体类型,当调用的时候传入的是什么类型,函数就计算什么类型,我们看一下C如何实现 交换两个变量的值void swap(void

    73630

    序员C快速上——级篇(九)

    结构体 背景结构体是一种聚合数据类型,C的数组也是一种聚合数据类型,它们显著的区别是,数组是相同数据类型的集合,而结构体可以是不同数据类型的集合。 这种结构体初始化方式是我推荐的,它极大的提升了代码可读性,而且这种被称为声明式法的表达,正是目前其他所流行的趋势。 当我们掌握C再去学习Go时,会发现Go的结构体都是这样去初始化的。 在C中,除了数组做函数参数是地址传递外,其他所有类型都是值传递,结构体也是如此。因而,在将结构体传入一个函数内部时,应当考虑使用结构体指针,避免对结构体做内存拷贝,用以提升性能。 实际上在C中,结构体声明通常是和另一关键字typedef结合起来使用的。

    72420

    基础】C

    给出一段代码:#include #include typedef struct test{ char a: 4; char b: 1; char c: 1;}test; int main(){ test 下面,如果test里的大小类型不一致呢:#include #include typedef struct test{ char a: 4; char b: 1; int c: 1;}test; int 对位制,不能把设置的位数长度大于类型的长度,比如typedef struct test{ char a: 10; char b: 1; char c: 8;}test;这里10已经超过了char类型的长度 ,所有译错误。 还有对于如果总长度大于设置的类型呢#include #include typedef struct test{ char a: 8; char b: 1; char c: 8;}test; int main

    36270

    扫码关注云+社区

    领取腾讯云代金券