char函数

Linux-C网络编程

旧巷老猫 提交于 2020-01-15 00:13:56
简介 基础是TCP/IP协议,网上资料很多不再赘述。 推荐《图解TCP/IP》 socket编程 网络字节序 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出, 接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存 因此,网络数据流的地址规定:先发出的数据是低地址,后发出的数据是高地址 TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。 例如UDP段格式,地址0-1是16位的源端口号,如果这个端口号是1000(0x3e8) 则地址0是0x03,地址1是0xe8,也就是先发0x03,再发0xe8 这16位在发送主机的缓冲区中也应该是低地址存0x03,高地址存0xe8。 但是,如果发送主机是小端字节序的,这16位被解释成0xe803,而不是1000。 因此,发送主机把1000填到发送缓冲区之前需要做字节序的转换。 同样地,接收主机如果是小端字节序的,接到16位的源端口号也要做字节序的转换。 如果主机是大端字节序的,发送和接收都不需要做转换。 同理,32位的IP地址也要考虑网络字节序和主机字节序的问题。 网络字节序转换 为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行 可以调用以下库函数做网络字节序和主机字节序的转换 #include <arpa/inet.h> uint32_t htonl

ffmpeg 开发: 001-搭建开发环境

守給你的承諾、 提交于 2020-01-14 18:47:47
介绍 由于命令行的ffmpeg工具无法满足产品的性能要求,需要对视频流进行兼容。所以需要调试有关的参数。 FFmpeg全名是Fast Forward MPEG(Moving Picture Experts Group)是一个集成了各种编解码器的库,可以说是一个全能型的工具,从视频采集、视频编码到视频传输(包括RTP、RTCP、RTMP、RTSP等等协议)都可以直接使用FFMPEG来完成,更重要的一点FFMPEG是跨平台的,Windows、Linux、Aandroid、IOS这些主流系统通吃。因此初期强烈建议直接使用FFMPEG。 编译有关的库: Linux版本的可以根据源码进行编译,可以参考本人的编译博文: Ubuntu 移植 ffmpeg + x264 arm linux 移植 FFMPEG库 + x264 Windows MacOS 版本 可以在 官网 进行下载Dev版本的: ffmpeg bulid 分为3个版本:Static,Shared,Dev。前两个版本可以直接在命令行中使用,他们的区别在于: Static(静态库版本): 里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,相关的Dll已经被编译到exe里面去了。作为工具而言此版本就可以满足我们的需求; Shared(动态库版本):里面除了3个应用程序:ffmpeg.exe

IDT系统中断描述表以及绕过Xurtr检测的HOOK姿势

笑着哭i 提交于 2020-01-14 08:22:17
什么是中断? 指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。 比如:除零(0号中断)、断点(3号中断)、系统调用(2e号中断)、以及异常处理等都会引发中断,所以自然需要相应的中断例程去进行处理。 这样操作系统就会用数据结构来维护这些中断例程,这个数据结构就是IDT(Interrupt Descriptor Table)。 中断描述表 IDT表的长度与地址是由CPU的IDTR寄存器来描述的。IDTR寄存器共有48位,高32位是IDT表的基地址,低16位是IDT的长度。 typedef struct _IDTR{ USHORT IDT_limit; USHORT IDT_LOWbase; USHORT IDT_HIGbase; }IDTR,*PIDTR; IDTR idtr; __asm SIDT idtr; 可以通过以上SIDT指令可以读取IDTR寄存器。然后通过MAKEWORD宏把高位与地位组合起来就可以获得IDT表的基地址了。 简单来说,IDT表是一张位于物理内存的线性表,共有256个表项。在32位模式下,每个IDT表项的长度是8个字节(64 bit),IDT表的总长度是2048字节。 kd> r idtr idtr

线程池-条件变量

北战南征 提交于 2020-01-14 07:24:55
main.c #include "jobBase.h" #include "job.h" #include "myThreadPool.h" #include <stdio.h> #include <pthread.h> #include <unistd.h> using namespace std; using namespace ThreadPool; using namespace MyJob; int main() { printf("main thread %lu\n", pthread_self()); char* threadPoolName = "xinxin's myThreadPool"; myThreadPool myFirstThreadPool(2, threadPoolName); int i = 1; for (;; ++i) { char jobName = 'a' + i; IMyJob* job = new Job(&jobName, i); if (NULL != job) { myFirstThreadPool.addJob(job); sleep(4); } else { printf("%d job is NULL\n", i); } } printf("get pending job num %d\n",

判断回文字符串

与世无争的帅哥 提交于 2020-01-14 06:35:29
本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。 函数接口定义: bool palindrome( char *s ); 函数 palindrome 判断输入字符串 char *s 是否为回文。若是则返回 true ,否则返回 false 。 裁判测试程序样例: #include <stdio.h> #include <string.h> #define MAXN 20 typedef enum {false, true} bool; bool palindrome( char *s ); int main() { char s[MAXN]; scanf("%s", s); if ( palindrome(s)==true ) printf("Yes\n"); else printf("No\n"); printf("%s\n", s); return 0; } /* 你的代码将被嵌在这里 */ 输入样例1: thisistrueurtsisiht 输出样例1: Yes thisistrueurtsisiht 输入样例2: thisisnottrue 输出样例2: No thisisnottrue /* 你的代码将被嵌在这里 */ bool palindrome( char *s ) {

第四章-文件和目录

…衆ロ難τιáo~ 提交于 2020-01-14 02:26:18
文件I/O 引言 函数stat、fstat、fstatat和lstat 文件类型 设置用户ID和设置组ID 文件访问权限 函数access和facessat 函数umask 函数chmod、fchmod和fchomodat 函数chown、fchown、fchownat和lchown 文件长度 文件截断 文件系统 函数link、linkat、unlink、unlinkat和remove 函数rename和renameat 创建和读取符号链接 文件的时间 函数futimens、utimensat和utimes 函数mkdir、mkdirat和rmdir 读目录 遍历文件层次结构 函数chdir、fchdir和getcwd 设备特殊文件 引言 本章内容覆盖 文件的所有属性 修改这些属性的各个函数 unix文件系统的结构以及符号链接 对目录进行操作的各个函数 函数stat、fstat、fstatat和lstat # include <sys/types.h> # include <sys/stat.h> # include <unistd.h> int stat ( const char * pathname , struct stat * buf ) ; //返回命名文件有关的信息结构 int fstat ( int fd , struct stat * buf ) ; /

PTA题库 查找字串

偶尔善良 提交于 2020-01-14 02:04:14
查找子串 本题要求实现一个字符串查找的简单函数。 函数接口定义: char * search ( char * s , char * t ) ; 函数 search 在字符串 s 中查找子串 t ,返回子串 t 在 s 中的首地址。若未找到,则返回 NULL 。 裁判测试程序样例: # include <stdio.h> # define MAXS 30 char * search ( char * s , char * t ) ; void ReadString ( char s [ ] ) ; /* 裁判提供,细节不表 */ int main ( ) { char s [ MAXS ] , t [ MAXS ] , * pos ; ReadString ( s ) ; ReadString ( t ) ; pos = search ( s , t ) ; if ( pos != NULL ) printf ( "%d\n" , pos - s ) ; else printf ( "-1\n" ) ; return 0 ; } /* 你的代码将被嵌在这里 */ 输入样例1: The C Programming Language ram 输出样例1: 10 输入样例2: The C Programming Language bored 输出样例2: 1 char * search

c++中类初始化赋值过程中字符串作为参数的问题

て烟熏妆下的殇ゞ 提交于 2020-01-14 00:32:00
先看一段类代码的定义: 类的头文件 #pragma once #include<iostream> using namespace std; class mycoach { public: char name[30]; int age; char expertise[60]; char foods[60]; mycoach(char *name,int age,const char* expertise); //mycoach(const mycoach& coach); ~mycoach(); void print(); void setfoodslike(char * foods); void eat(); }; 类的实现文件 #define _CRT_SECURE_NO_WARNINGS #include "mycoach.h" #include <string.h> using namespace std; mycoach::mycoach(char *_name,int age,const char * expertise):age(age) { strcpy(name,_name); cout << "I'm " <<name<< endl; cout << "芳龄:" << age << endl; cout << "我擅长:"<<expertise <<endl;

C语言08-数组II:数组传参、二维数组

泄露秘密 提交于 2020-01-13 17:35:21
文章目录 二维数组 二维数组寻址公式 数组传参 二维数组 二维数组寻址公式 对于 type ary2D[M][N] 其ary2D[i][j]语速对应的地址是: a r y 2 D + ( i × N + j ) × s i z e o f ( t y p e ) ary2D+(i\times N+j)\times sizeof(type) a r y 2 D + ( i × N + j ) × s i z e o f ( t y p e ) char g_Data[6]; void SetElement23(int nRow, int nCol, char chValue) { g_Data[nRow * 3 + nCol] = chValue; } void SetElemet32(int nRow, int nCol, char chValue) { g_Data[nRow * 2 + nCol] = chValue; } int main(int argc, char* argv[]) { SetElement23(1, 2, 'a'); SetElemet32(2, 0, 'b'); return 0; } 数组传参 预测以下代码结果( 还需要看 ) void Fun(char chAry[30]) { printf("%d\r\n", sizeof(chAry)); }

C++STL库String类实现

巧了我就是萌 提交于 2020-01-13 14:50:11
前言:按照源码中String类的设计方式实现简单的写了一个myString,参考 C++官网中的标准stringAPI 完成几乎所有的String类的方法,尽量与源码实现风格类似,有部分没实现有的功能之间相似度较高,重复工作意义不大就没写,有的是没办法写。 亲自在我写的数据结构课设哈弗曼树中使用,没有出现特殊问题,自己测试也没有出问题,如果哪里有错希望大家可以给我指出来。 (一) 关于扩容 在开始写的时候我先查阅相关资料和源码,对与String的扩容,我发现在源码中String的实现里,它预先会有一个16字节的在栈区的缓冲区,如果你的String对象不到16字节,则不会申请堆区内存使用这部分栈区内存,在所占内存较小的情况下,直接使用栈区内存的会增强运行效率,提高CPU cache命中率,而当你使用的string类占据内存过大时,据我查我的系统(Deepin 15.10.1),默认栈内存只开辟8192KB。 如果String类对象所占内存过大,很有可能程序直接爆栈,所以,在字符串内存高于16字节时,会开辟堆区内存,在源码中,为了节省空间,在这里使用了一个联合体,下面是该联合体结构。 我自己模拟的结构 enum { BUF_LEN = 16 } ; union _Bxty { char _Buf [ BUF_LEN ] ; char * _ptr ; } _Bx ; 在扩容的时候