sizeof

GNU/Linux应用程序开发学习笔记(三)套接字编程

南笙酒味 提交于 2020-03-30 06:19:54
套接字编程的各级要素: `主机接口:网络地址ip `协议:特定的协议(TCP & UDP) `端口:client或server的进程终点 套接字 简单的说,套接字就是两个应用程序之间通信管道的终点,这个管道可以唯一的标志一条链接,而应用程序则通过套接字来操作这个管道通信。 通信过程 要想使不同主机的进程通信,就必须使用套接字,套接字是用socket()函数创建,如果需要C/S模式,则需要把server的套接字与地址和端口绑定起来,使用bind(),当上述操作完成后,便可使用listen()来监听这个端口,如果有其他程序来connect,那么server将会调用accept()来接受这个申请并为其服务。client是调用connect()来建立与server之间的连接,这时会使用传说中的三次握手来建立一条数据链接。当连接被建立后,server与client便可以通信了,通信可以使用read()/write(),send()/recv(),sendto()/recvfrom()等一些函数来实现,但是不同的函数作用和使用位置是不同的。当数据传送完后,可以调用close()来关闭server与client之间的链接。上述过程就是不同主机之间进程通信的大致过程,当然这只是一个概要,其中的细节还是很多的。 创建和清除套接字 创建套接字的原型如下 int socket(int domain,

CSP201503-1:图像旋转

断了今生、忘了曾经 提交于 2020-03-29 09:01:07
引言: CSP (http://www.cspro.org/lead/application/ccf/login.jsp) 是由 中国计算机学会( CCF )发起的"计算机职业资格认证"考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事 IT 领域专业技术与技术管理人员,以及高校招考研究生的复试对象。 问题描述   旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。   计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式   输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。   接下来n行每行包含m个整数,表示输入的图像。 输出格式   输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。 样例输入 2 3 1 5 3 3 2 4 样例输出 3 4 5 2 1 3 评测用例规模与约定 1 ≤ n, m ≤ 1,000 ,矩阵中的数都是不超过 1000 的非负整数。 源代码(一):使用动态分配的一维数组 /* 一维数组的方式求解,空间动态分配 */ # include <stdio.h> # include <stdlib.h> # include <memory.h> int main( void ) { int n; // 行数

专题训练之双连通

蹲街弑〆低调 提交于 2020-03-29 07:45:11
桥和割点例题+讲解:hihocoder1183 http://hihocoder.com/problemset/problem/1183 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<vector> 5 #include<set> 6 using namespace std; 7 const int maxn=1005; 8 const int maxm=200010; 9 struct edge{ 10 int to,nxt; 11 bool cut; 12 }edge[maxm*2]; 13 int head[maxn],tot; 14 int low[maxn],dfn[maxn]; 15 int index,n,bridge; 16 set<int>st; 17 bool cut[maxn]; 18 19 void addedge(int u,int v) 20 { 21 edge[tot].to=v; 22 edge[tot].nxt=head[u]; 23 edge[tot].cut=false; 24 head[u]=tot++; 25 } 26 27 void tarjan(int u,int pre) 28 { 29 low[u]=dfn[u]=++index; 30

Problem in sizeof() operator and poiner declaration

大憨熊 提交于 2020-03-28 06:56:10
问题 This question was asked in my Sem-2 examination. Question asked us to give the desired output. int main(void) { int a[] = {10,20,30,40,50,60}; int (*p1)[2]=a , (*p2)[3]= a; if(sizeof(p1)==sizeof(p2)) printf("%d",*(*p1+2)); if(sizeof(*p1)==sizeof(*p2)) printf("%d",*(*(p2+1))); return(0); } Compiler warnings: Warning: initialization from incompatible pointer type [-Wincompatible-pointer-types] initialization from incompatible pointer type [-Wincompatible-pointer-types] Output that I expect: 20

socket编程的select模型

爷,独闯天下 提交于 2020-03-28 01:56:57
在掌握了socket相关的一些函数后,套接字编程还是比较简单的,日常工作中碰到很多的问题就是客户端/服务器模型中,如何让服务端在同一时间高效的处理多个客户端的连接,我们的处理办法可能会是在服务端不停的监听客户端的请求,有新的请求到达时,开辟一个新的线程去和该客户端进行后续处理,但是这样针对每一个客户端都需要去开辟一个新的线程,效率必定底下。 其实,socket编程提供了很多的模型来处理这种情形,我们只要按照模型去实现我们的代码就可以解决这个问题。主要有select模型和重叠I/o模型,以及完成端口模型。这次,我们主要介绍下select模型,该模型又分为普通select模型,wsaasyncselect模型,wsaeventselect模型。我们将通过样例代码的方式逐一介绍。 一、select模型 使用该模型时,在服务端我们可以开辟两个线程,一个线程用来监听客户端的连接 请求,另一个用来处理客户端的请求。主要用到的函数为select函数。如: 全局变量: fd_set g_fdClientSock; 线程1处理函数: SOCKET listenSock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(7788);

memset函数用法

流过昼夜 提交于 2020-03-27 16:28:33
转自: https://blog.csdn.net/liwenjia1981/article/details/6304547 头文件准备<string.h> 函数原型  void *memset(void *s, int ch, unsigned n); //n参数是以 字节 为单位,最好用sizeof() 例:memset(array,0,5*sizeof(int)); 用途:memset可以方便的清空一个结构类型的变量或数组。   如:   struct sample_struct   {   char csName[16];   int iSeq;   int iType;   };   对于变量   struct sample_strcut stTest;   memset(&stTest,0,sizeof(struct sample_struct));   如果是数组:   struct sample_struct TEST[10];   则   memset(TEST,0,sizeof(struct sample_struct)*10); 来源: https://www.cnblogs.com/guangzhouhe/p/12580522.html

C++: sizeof of struct with bit fields

眉间皱痕 提交于 2020-03-27 06:48:38
问题 Why is gcc giving returning 13 as the sizeof of the following class ? It seems to me that we should get e (4 bytes) + d (4 bytes) + 1 byte (for a and b) = 9 bytes. If it was alignment, aren't most 32 bit systems aligned on 8 byte boundaries ? class A { unsigned char a:1; unsigned char b:4; unsigned int d; A* e; } __attribute__((__packed__)); int main( int argc, char *argv[] ) { cout << sizeof(A) << endl; } ./a.out 13 回答1: You are very likely running on a 64 bit platform and the size of the

C语言memset()函数的用法

感情迁移 提交于 2020-03-26 01:58:23
C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符) 到参数 str 所指向的字符串的前 n 个字符。 声明 下面是 memset() 函数的声明。 void *memset(void *str, int c, size_t n) 参数 str -- 指向要填充的内存块。 c -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。 n -- 要被设置为该值的字节数。 例:char a[100];memset(a, ‘/0’, sizeof(a)); memset可以方便的清空一个结构类型的变量或数组。 struct sample_struct { char csName[16]; int iSeq ; int iType ; } ; int main() { struct sample_struct stTest; //一般的情况stTest方法: /* stTest.csName[0]='\0'; stTest.iSeq=0; stTest.iType=0;*/ memset(&stTest,0,sizeof(stTest)); printf("%c%d%d",stTest.csName[0],stTest.iSeq,stTest.iType); //如果是数组 /*

[NOIP2007][原题]

别等时光非礼了梦想. 提交于 2020-03-25 05:12:38
1 . 统计数字 (count.pas/c/cpp) 【问题描述】 某次科研调查时得到了 n 个自然数,每个数均不超过1500000000(1.5*10 9 )。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 【输入】 输入文件count.in包含 n +1行: 第1行是整数 n ,表示自然数的个数。 第2~ n +1行每行一个自然数。 【输出】 输出文件count.out包含 m 行( m 为 n 个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。 【输入输出样例】 count.in count.out 8 2 4 2 4 5 100 2 100 2 3 4 2 5 1 100 2 【限制】 40%的数据满足:1<= n <=1000 80%的数据满足:1<= n <=50000 100%的数据满足:1<= n <=200000,每个数均不超过1 500 000 000(1.5*10 9 ) #include <stdio.h> #include <stdlib.h> int n; int a[201000]; int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;

socket example

自闭症网瘾萝莉.ら 提交于 2020-03-25 03:16:27
for code copy in the future simple server and client may be useful for copy in the future server: [cpp] view plain copy #include <errno.h> #include "sys/types.h" #include "sys/socket.h" #include "sys/stat.h" #include "unistd.h" #include <netinet/in.h> //#include <arpa/inet.h> #include <fcntl.h> #define SERVER_PORT (56738) #define SERVER_IP "127.0.0.1" #define LOG printf static void handle_crashing_process_new( int fd) { int n; unsigned int tid; int length = getpid(); int retry = 30; printf( "handle_crashing_process_new in\n" ); while ((n = read(fd, &tid, sizeof (unsigned))) != sizeof (unsigned