
C语言
Star星屹程序设计
编程新手,个人记笔记,方便日后看,很多东西记着只是为了自己方便。。喷子请绕道!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
bitcount函数:统计x中值为1的二进制位数
bitcount(unsigned x):统计x中值为1的二进制位数 将x声明为无符号类型是为了保证将x右移时,无论该程序在什么机器上运行,左边空出的位都是0(而不是符号位)填补。1、通过右移操作实现#include <stdio.h>//通过右移操作实现int bitcount(unsigned x) { int b; for(b = 0; x != 0; x >>= 1) { if(x & 01) { b++; } } .原创 2022-03-02 16:26:32 · 1235 阅读 · 0 评论 -
SYN洪泛攻击
TCP SYN泛洪发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户原创 2020-07-06 08:59:49 · 795 阅读 · 1 评论 -
C语言网络编程出错处理函数的自封装
出错处理封装函数 我们知道,系统调用不能保证每次都成功,必须进行出错处理,这样一方面可以保证程序逻辑正常,另一方面可以迅速得到故障信息。为使错误处理的代码不影响主程序的可读性,我们把与socket相关的一些系统函数加上错误处理代码包装成新的函数,做成一个模块wrap.c:wrap.h#ifndef __WRAP_H_#define __WRAP_H_void perr...原创 2020-02-16 10:24:19 · 484 阅读 · 0 评论 -
C/S模型中常用的网络通信函数
socket函数#include <sys/types.h> /* See NOTES */#include <sys/socket.h>int socket(int domain, int type, int protocol); //创建一个套接字domain: AF_INET 这是大多数用来产生socket的协议,使用TCP或UDP来传输...原创 2020-02-15 15:59:44 · 487 阅读 · 0 评论 -
网络分层模型及网络通信流程
分层模型OSI七层模型物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。 数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确...原创 2020-02-05 22:02:56 · 1042 阅读 · 0 评论 -
网络协议、应用程序设计模式
协议的概念什么是协议:本质上就是一种规则从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定:(FTP文件传输协议的雏形)第一次,传输文件名,接收方接收到文件名,应答OK给传输方;第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK;第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。由此...原创 2020-02-05 21:50:09 · 618 阅读 · 0 评论 -
vim常识
一、vim键盘图二、常用命令光标移动h 光标左移。 j 光标下移。 k 光标上移。 l 光标右移。 w 跳到单词开头。 W 跳到下一个单词开头出,如果多个单词连接起来,当作一个单词。 e 跳到单词的尾部。 E 跳到单词的尾部,多个单词当作一个。 b 往前跳到上一个单词开头出。 B 往前跳到上一个单词开头出,多个单词当作一个。 0 跳到一行的开始 ^跳到第...原创 2020-05-01 08:22:12 · 387 阅读 · 0 评论 -
C语言使用正则表达式
C程序中使用正则POSIX规定了正则表达式的C语言库函数,详见regex(3)。我们已经学习了很多C语言库函数的用法,读者应该具备自己看懂man手册的能力了。本章介绍了正则表达式在grep、sed、awk中的用法,学习要能够举一反三,请读者根据regex(3)自己总结正则表达式在C语言中的用法,写一些简单的程序,例如验证用户输入的IP地址或email地址格式是否正确。C语言处理正则表达式常...原创 2020-03-16 21:03:29 · 2566 阅读 · 0 评论 -
cJSON库的使用(二)
一、C语言库函数解析json文件(已知json文件解析数据)1、首先了解cJSON结构体的结构(双向链表实现)/* The cJSON structure: */typedef struct cJSON{ /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/Ge...原创 2020-02-14 20:40:29 · 1532 阅读 · 0 评论 -
cJSON库的使用(一)
1、JSON格式:一对大括号,相当于XML的头和尾,内部全是键值对{ "name" : "apple", "sex" : "famale", "high" : "178", "girls":["alice", "ruby", "kit"], "家电" :{"TV":"changhong"}}注:结合JSON视图工具,可以把JSON数据结构化展示...原创 2020-02-14 18:27:10 · 1615 阅读 · 0 评论 -
ctype.h C语言字符处理头文件
#include <ctype.h>函数名称 返回值isalnum() 如果参数是字母数字,即字母或者数字,函数返回trueisalpha() 如果参数是字母,函数返回trueiscntrl() 如果参数是控制字符,函数返回trueisdigit() 如果参数是数字(0-9),函数返回trueisgraph() 如果参数是除空格之外的打印字符,函数返回tr...原创 2019-11-24 19:35:27 · 398 阅读 · 0 评论 -
Linux下文件链接函数
Linux下文件组成部分:inode结点(存储文件的属性信息)、目录项(dentry)Inode内部存放的信息:文件大小、文件权限、文件类型、文件存储指针地址(指向数据块的首地址)创建硬链接其实就是创建一个目录项,所以删除文件硬链接时删除的是目录项目录项包含:文件名、inode编号一、link函数——<unistd.h> 为文件创建一个硬连接int link(con...原创 2019-09-20 15:55:46 · 509 阅读 · 0 评论 -
C库函数与Linux系统函数的关系
一、C库I/O函数执行流程展示C库函数较Linux函数多了一块I/O缓冲区,用于提高程序的执行效率,避免频繁的操作磁盘I/O缓冲区默认大小为 8K。注:磁盘的读写速度是毫秒级(ms)的,而内存的读写速度是纳秒级(ns)的,两者的读写速度相差一百万倍!!!!1、一个文件对应有三个属性:文件描述符、文件读写位置指针、内存buffer文件描述符:用于索引到对应的磁盘文件文件读...原创 2019-08-09 11:15:07 · 586 阅读 · 0 评论 -
静态库 / 共享库
首先简单了解一下什么是库?预先编译好的集合就是库。根据连接时期不同,库分为静态库和共享库。静态库是在程序编译时期链接的,动态库是在程序运行时期链接的。linux上库的命名一般为:libxxx.a(静态库)libxxx.so动态库,库文件存放的地点位/lib或者/usr/lib一、静态库1、命名规则lib + 库名 + .a //注:静态库的后缀是: .a如:...原创 2019-08-21 21:59:01 · 446 阅读 · 0 评论 -
Linux下gcc编译过程及参数介绍
GCC(GNU Compiler Collection,GNU编译器套件),是由GNU开发的编程语言编译器。1、gcc编译过程详解:ESc法2、参数介绍gcc 常用参数:1、-I : 用于指定头文件存放路径 如:gcc main.cpp -I ./include2、-D : 在执行命令的时候,在外部指定宏 如:gcc main.cpp -D DEBUG ...原创 2019-07-17 18:46:13 · 2243 阅读 · 0 评论 -
C语言错误代码errno
errno 是记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义。查看错误代码errno是调试程序的一个重要方法。当linux C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。在实际编程中用这一招解决了不少原本看来莫名其妙的问题。函数执行出错的原因有...原创 2019-09-18 10:42:01 · 10745 阅读 · 0 评论 -
Linux调试工具——GDB
GDB是UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。为了使用GDB进行Linux下程序的调试,gdb调试前,需用gcc生成对应的包含...原创 2019-09-18 14:57:45 · 413 阅读 · 0 评论 -
C语言位操作
C语言提供了6个位操作运算符,这些运算符只能作用于整型操作数,即只能作用于带符号或无符号的char short int long1、C语言左移操作符 "<<"注:C语言中移位操作都是针对1进行的,32机中,1表示为:0000 0000 0000 00011 << 12 结果:0001 0000 0000 0000~(1 << 12) 结果:...原创 2019-09-18 14:58:12 · 379 阅读 · 0 评论 -
Linux系统I/O函数
常用的系统I/O函数:帮助文档查看方式(man文档章节2) man 2 open man文档章节2中的open函数快捷方式:Esc+. :获取上次命令中所用到的路径vim编辑器小技巧:光标放在对应函数上,shift+K调到函数对应帮助文档中一、open函数需引入头文件:<sys/types.h>、<sys/stat.h>、<fcntl.h>...原创 2019-09-18 15:23:34 · 458 阅读 · 0 评论 -
Linux文件操作相关函数
一、stat函数——学完实现ls命令stat命令:列出文件属性,如下所示:int stat(const char *path, struct stat *buf);//*buf传出参数,准备一块内存空间(以后看见此类参数一般是传出参数)struct stat 结构体对stat命令输出文件各属性的值进行了封装st_mode占2byte,共16位***struct stat 结...原创 2019-09-18 16:00:32 · 567 阅读 · 0 评论 -
Linux目录操作函数
一、chdir函数:修改当前进程的路径 <unistd.h>,修改此函数所在进程的可执行程序的历经int chdir(const char*path);./a.out ../test/. 改变./a.out 进程所在的路径二、getcwd函数:获取当前进程的工作路径getcwd(buf, sizeof(buf));三、mkdir函数 int mkdir(const c...原创 2019-09-20 15:53:07 · 464 阅读 · 0 评论 -
Linux虚拟地址空间
首先,对于32位机器而言,每个程序运行起来,os会给程序提供4G的可操作空间,但并非就是硬盘少了4G,而是程序可以操作4G,具体使用多少视具体使用情况而言,其他未用到的仍然空闲放在那里!段错误:段错误就是指访问的内存超出了系统所给这个程序的内存空间下面看一下4G虚拟地址的具体分配情况:1、指向NULL的指针:此时该指针放在受保护地址段(0~4K),指针无法正规操作,所以要想使用指针...原创 2019-08-09 10:39:21 · 358 阅读 · 0 评论