- 博客(50)
- 收藏
- 关注
转载 网络编程socket基本API
socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。 socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结
2017-08-09 16:10:50 252
转载 TCP/IP四层模型和OSI七层模型
TCP/IP四层模型和OSI七层模型对应表。我们把OSI七层网络模型和Linux TCP/IP四层概念模型对应,然后将各种网络协议归类。 表1-1 TCP/IP四层模型和OSI七层模型对应表 OSI七层网络模型linux TCP/IP四层概念模型对应网络协议应用层(Application)应用层
2017-08-09 14:12:17 294
转载 Linux多线程编程的高效开发
Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别。不注意这些 linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断。本文中我们从 5 个方面总结出 Linux 多线程编程上的问题,并分别引出相关改善的开发经验,用以避免这些的陷阱。我们希望这些经验可以帮助读者们能更好更快的熟悉 Linux 平台的多线程编程。我们假
2017-08-09 11:36:36 223
转载 epoll使用详解
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且
2017-08-09 11:34:55 288
原创 构造函数析构函数抛出异常
从语法上来说,构造函数和析构函数都可以抛出异常。但从逻辑上和风险控制上,构造函数可以,析构函数不推荐抛出异常。1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。 [正常情况下调用析构函数抛出异常导致资源泄露]2)通常异常发生时,c++的机制会调用已经构造对象的析构函数
2017-08-01 10:41:43 286
原创 类占用空间的计算
例如class C{ public: char a; static char b; void * p; static int *c; virtual void func1(); virtual void func2();};sizeof(类)计算的是类中存在
2017-08-01 10:23:34 463
原创 文件操作
输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的。在实际应用中,常以磁盘文件作为对象。即从磁盘文件读取数据,将数据输出到磁盘文件。 对用户来说,常用到的文件有两大类,一类是程序文件(program file)。一类是数据文件(data file)。程序中的输入和输出的对象就是数据文件。 1.文件打开(open)(1) 调用文件流的成员
2017-08-01 09:58:22 310
原创 链表的操作
链表有单向链表双向链表,循环链表和不循环,还有带表头和不带表头。链表的操作步骤基本一致以不带表头的单向不循环链表为例1.先定义一个结构体,作为链表的节点来使用,例如:struct node{char name[20];int num;struct node *next; //定义一个结构体指针,为了链接节点};typedef struct node
2017-04-07 14:13:58 272
原创 通过编程实现,统计1~n有多少个9
通过编程实现,统计1~n有多少个9 #include int main(){int n,m,k;int i,j = 0;printf("enter n:");scanf("%d",&n);for(i = 1; i { k = i; while(k) {if(k ==
2017-02-22 19:09:59 1198
原创 利用链表实现一个先入后出的栈结构,并提供栈操作的push和pop的接口
利用链表实现一个先入后出的栈结构,并提供栈操作的push和pop的接口#include #include #define Max 10struct stack_data{ int stack_text; struct stack_data* next;};typedef struct stack_data Stack;
2017-02-21 19:29:07 2099 1
原创 有n个人围成一圈,顺序排号,从第一个开始报数
有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.提示:用环形链表实现#include #include struct student{ int num;struct student * next;};typedef struct student Stu;
2017-02-20 20:07:58 2535
原创 编写程序STUDENT *Create(STUDENT studs[],int n)
编写程序STUDENT *Create(STUDENT studs[],int n)。 STUDENT是一个结构类型,包含姓名、成绩和指针域。studs数组中存储了n个STUDENT记录。create函数的功能是根据studs数组建立一个链表,链表中结点按成绩降序排列,函数返回链表头指针。(注:个人觉得这道题很好,定义一个结构体类型的数组,对链表操作,好多算法比如对链表排序,直接对链表
2017-02-18 11:41:06 1175
原创 输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示.
输入一个整数a,再输入两个整数p(p将该整数a的p位设置为v,输出修改后的该整数的二进制表示.#include void bin(int n); //输出二进制函数int main(){int a, p, v;int mask = 1;printf("enter a number:");scanf("%d",&a);prin
2017-02-10 18:25:56 390
原创 编写函数fun(int *a, int n, int *odd, int *even)
编写函数fun(int *a, int n, int *odd, int *even), 功能是:求出数组a[]中所有奇数之和以及所有偶数之和。并利用指针odd返回奇数之和,利用指针even返回偶数之和。 例如:a[]的值依次为:1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和 8。#include int fun(int *a,int
2017-02-09 13:39:17 2791
原创 编写函数int stat(int a[],int n,int c[][2])
编写函数int stat(int a[],int n,int c[][2])。 a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的整数,从而生成有n/2个元素组成的整数数列;统计该数列中不同整数各自出现的次数,并将统计结果保存到c指向的二维数组中。函数返回不同整数的个数。#include int s
2017-02-07 16:54:21 667
原创 编写函数void count(char a[],char w[][10],int n,int b[])
编写函数void count(char a[],char w[][10],int n,int b[])。 功能是:统计w指向的数组中的n个单词在a指向的字符串中各自出现的次数(将非字母字符看作单词分割符),拧将统计结果依次保存在b指向的数组中。#include void count(char a[],char w[][10],int n,int b[]);int
2017-02-05 18:00:42 3176 1
原创 输入一个字符串,同时输入帧头和帧尾
1. 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.提示:帧头和帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧#include #include int substr(char str[255],char s[255],int k); //函数查找帧
2017-02-04 19:18:25 1606
原创 输入一个字符串,计算字符串中子串出现的次数
输入一个字符串,计算字符串中子串出现的次数#include int main(){char s[40]; //存放主字符串char s1[20]; //存放子串char *p = s;char *p1 = s1;int n = 0; //统计个数printf("enter a string:\n");sca
2017-02-02 16:10:51 905
原创 找出7个默森尼数。
找出7个默森尼数。法国数学家默森尼曾提出下列公式:Mp=2^p-1。当p是素数并且Mp也是素数时,称Mp为默森尼数,例如,p=5,Mp=2^5-1=31,5和31都是素数,因此31是默森尼数;而Mp=2^11-1=2047,11是素数,2047不是素数,因此2047不是默森尼数.#include #include int prime(int n);int
2017-02-01 21:51:23 505
原创 找出符合以下条件的Troitsky数
找出符合以下条件的Troitsky数,将该数的首位数字移动到末位数字之后得到的数是原数的整数倍 例如:将142857的首位数字1移动到末位之后得到的数是428571,而428571=3*142857,因此142857是Troitsky数 编程要求: (1) 编写函数int Troitsky(long a[]),其功能是求出10000以内的所有Troitsk
2017-01-31 18:47:08 555
原创 编写函数void change(char *a,char *b,char*c)。
编写函数void change(char *a,char *b,char*c)。 函数功能是首先把b指向的字符串逆向存放,然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中,两个字符串中过长的剩余字符接在c指向数组的尾部。例如,当a指向的字符串为"abcdefg",b指向的字符串为"1324"时,c指向的数组中字符串应为"a4b2c3d1efg"。#incl
2017-01-30 11:03:10 2212
原创 从一个字符数组中读出相应的整数、实数
#include #include #define SIZE 255int main(){char str[SIZE];int t,i = 0,a[40],m = 0,n = 0;float f_num,k ,f[40];printf("Please input strings include number:\n");scanf("%s"
2017-01-29 21:39:38 248
原创 冒泡排序
原理:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。 至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比
2017-01-23 18:46:28 160
原创 scanf()输入数字和字符
现在写一个代码,输入数字和字符,同时打印出来例如:#include int main(){ int a; char c; scanf(“%d”,&a); scanf(“%c”.&c); printf(“a = %d, b = %c\n”,a,c); return 0;}运行结果如下:
2017-01-22 19:06:43 4050
原创 命令补充
查看文件内容(1)cat显示最后一页cat -E 显示结尾的断行字符$ -n 显示行号 -T tab键以^形式显示 -v 显示其他特殊符号(2)和cat类似,只不过它显示第一页,倒过来显示(3)more 文件名按空格 往下翻一页e
2017-01-21 11:07:49 193
原创 工程管理器make
在程序的整个开发过程中,程序的调试的工作量占到70%。使用gcc命令行编译程序时,gcc会把没有修改过的源文件一起编译,这样影响了编译的总体效率。 GCC提供了半自动化的工程管理器Make。所谓半自动化是指在使用工程管理器前需要人工编写程序的编译规则,所有编译规则都保存在Makefile文件中。 makefile文件主要由三部分组成(1)需要生成的目标文件(target f
2017-01-20 19:05:43 354
原创 静态库
静态库的使用分为静态链接和动态链接。静态链接是指编译系统在链接阶段把程序的目标文件和所需要的函数库文件链接在一起,这样生成的可执行文件就可以在没有函数库的情况下运行。 动态链接是指编译系统在链接阶段并不把目标文件和函数库文件放在一起,而是等到程序在运行过程中需要使用时才链接函数库。 使用静态链接方式产生的可执行文件体积比较大,但运行效率较高。而使用动态链接方式产生的可执行文件没有库
2017-01-19 19:52:16 155
原创 double类型的输入和float类型输入
例题:编写一个程序让用户按厘米输入一个高度值,然后,程序按照厘米和英尺英寸显示这个高度值。允许厘米和英寸的值出现小数部分。程序允许用户继续输入,直到用户输入一个非正的数值。1.在把cen和inches定义成float类型时,下面是完整代码,运行结果如下:#include int main(){ float cen,inches;int feet;printf("E
2017-01-18 19:38:18 4858
原创 printf()的转换说明修饰符
可以在%和定义转换字符之间通过插入修饰符对基本的转换说明加以修改。下面例如可以插入的合法字符。如果使用了一个以上的修饰符,那么他们应该与表中的顺序相同,并不是所有的组合都是可能的。1.标志:(1)- 项目是左对齐的;也就是说,会把项目打印在字段的左侧开始处。例如:“%-20s” (2)+ 有符号的值若为正,则显示带
2017-01-17 11:01:13 1484
原创 转换说明符及其作为结果打印
请求printf()打印变量的指令取决于变量的类型。例如,在打印整数的时候使用%d符号,而打印字符时使用%c符号。这些符号被称为转换说明,因为它们指定了如何把数据转换成可显示的形式。下面列出ANSIC标准为printf()提供的各种转换说明。%a 浮点数、十六进制数字和p-计数法(C99)%A 浮点数、十六进制数字和p-计数法(C99)%c 一个字符%d 有
2017-01-17 09:56:27 400
原创 C的逻辑运算符
位逻辑运算符一、取反~ 一元运算符~将每个1变为0,将0变为1。例如:~(10011010)//表达式 (01100101)//结果值 假设val是一个unsigned char,已赋值为2.在二进制
2017-01-12 20:58:09 375
原创 使用指针在函数间通信
通过一个例子讲述如何通过指针解决函数间的通信#includevoid interchange(int *u,int *v);int main(void){ int x=5,y=10; printf("originally x=%d and y=%d.\n",x,y); interchange(&x,&y); printf("now x=%d
2017-01-11 21:35:43 715 1
原创 使用指针参数
向函数传递数组信息的方法一是使用一个指针参量来确定数组的开始起点,使用一个整数参量来指明数组的元素个数。方法二是传递两个指针,第一个指针指明数组的起始地址,第二个指针指明数组的结束地址。例如:#include#define SIZE 10int sump (int *start,int *end);int main(void){ int marbles[SIZE]={
2017-01-11 20:28:20 352
原创 指针
1.指针是一个其值为地址的变量(或更一般的说是一个数据对象)。如果你想把某个指针变量命名为ptr,可以用语句:ptr=&pooth; 称ptr指向pooth。ptr和&pooth的区别在于前者为一变量,后者是一个常量。2.间接运算符* 假定ptr=&bah; 可以使用间接运算符*(也称取值运算符)来获取bah中存放的数值。 val=*ptr; 两个语句放在一起等于v
2017-01-09 20:55:49 325
原创 指针和数组
1.指针提供了一种用来使用地址的符号方法。指针能够有效的处理数组。 例如:flizny==&flizny[0] ,数组名同时也是该数组首元素的地址。也就是说,flizny和&flizny[0]都代表首元素的内存地址。
2017-01-06 20:21:09 245
原创 多维数组
1.float rain[5][12]; 这是一个二维数组,rain是一个包含五个元素的数组,每个元素的类型是float[12];也就是说rain具有五个元素,每个元素是包含12个float数值的数组。 按此类推,rain的首元素rain[0]是一个包含12个float数值的数组,后面类推。则rain[0]数组的首元素是rain[0][0];以此类推其他元素。也可以把rain数组看
2017-01-06 19:51:27 221
原创 一维数组
1.数组由一系列类型相同的元素构成。数组声明中包括数组元素的数目和元素的类型。例如:int sta[50]; 50个整数数组[]表示sta为数组括号里的数字指明了数组所包含的元素数目。要访问数组中的元素,可以使用下标数字来表示单个元素。下标数字也称为索引,从零开始计数。因此,sta[0]是第一个元素,sta[49]是第50个元素。2.初始化 例如:int power[4]
2017-01-05 20:32:55 323
原创 字符串函数
1.char*strcpy(char*s1,const char* s2);该函数把s2指向的字符串(包括空字符)复制到s1指向的位置,返回值是s1.2.char*strncpy(char*s1,const char* s2,size_t n);该函数把s2指向的字符串复制到s1指向的位置,复制的字符不超过n个,返回值是s1.空字符后的字符不被复制。如果原字符串的字符数少于n个,在目标
2017-01-04 20:36:20 202
原创 转义字符
单引号技术适用于字符、数字和标点符号,但是有一些字符是打印不出来的,例如:退格、换行或者让终端铃响。可以使用特殊的符号序列,即转义序列。 \a 警报 \b 退格 \f 走纸 \n 换
2016-12-31 20:18:20 223
原创 对字符串的输入输出函数
1.gets()函数 gets()(代表get string)函数对于交互式程序非常方便。遇到换行字符(\n)结束。它读取换行字符之前的所有字符,在这些字符后面添加一个空字符(\0),然后把这个字符串交给调用它的程序。它将读取换行字符并将它丢弃,这样下一次读取就会在新的一行开始。 gets()函数通过两种方式获得输入:(1)它使用一个地址把字符串赋予变量(2)gets()的
2016-12-30 18:45:55 590
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人