- 博客(64)
- 资源 (23)
- 收藏
- 关注
原创 Linux C的select函数的使用
1、select函数简介int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval*timeout); 当服务器响应多个客户端连接的时候,需要定义一个线程函数,在每一个线程函数里面处理该连接,进行数据的读写,且connect、accept、recv或recvfrom这样的函数都是阻塞的。
2015-08-31 22:57:14 13015 1
原创 哲学家吃饭问题 代码实现如何 避免线程死锁
问题描述: 假设有5个哲学家,他们花费一生中的时光思考和吃饭。这些哲学家共用一个圆桌,每个哲学家都有一把椅子。在桌子中央是一碗通心面,在桌子上放着5只筷子。当一个哲学家思考时,他与其他同事不交互。时而,哲学家会感到饥饿,并试图拿起与他相近的两只筷子(他与邻近左、右之间的筷子)。一只筷子一次只能被一个哲学家拿起。显然,他不能从其他哲学家手里拿走筷子。当一个饥饿的哲学家同时有两只筷子时,他就可
2015-08-31 21:29:23 2256
原创 Linux C打印所有的环境变量
1、在终端显示环境变量执行env命令nii@mmch:~/code$ envLC_PAPER=zh_CN.UTF-8LC_ADDRESS=zh_CN.UTF-8XDG_SESSION_ID=4LC_MONETARY=zh_CN.UTF-8TERM=xtermSHELL=/bin/bashSSH_CLIENT=192.168.217.1 34476 22LC_NUMERIC=zh_CN
2015-08-31 14:18:18 5170
原创 Linux系统文件描述符理解
1、查看系统文件描述符个数。以下是查看Linux文件描述符的三种方式:[root@localhost ~]# sysctl -a | grep -i file-max --colorfs.file-max = 392036[root@localhost ~]# cat /proc/sys/fs/file-max392036[root@localhost ~]# ulimit -n1024
2015-08-31 11:01:08 2373
原创 Linux进程通信---信号量 代码实现
1、信号量使用流程(1)获得keyVal值值要一样。keyVal = ftok(PATH_SHM,PRI_SHM_ID);(2)创建信号量或打开信号量的键值nSemid = semget(keyVal,1,IPC_CREAT);(3)设置信号量 semctl(nSemid,0,SETVAL,1)(4)判断现在该资源是否被加锁,如果加锁则阻塞,如果不枷锁,则该进程把这块资源加锁,现在由这个进程使用。在
2015-08-30 23:57:19 1288
原创 Linux进程通信---消息队列 代码实现
1、消息队列函数的使用“消息队列”是在消息的传输过程中保存消息的容器。当消息从队列内取出后,相应的消息就从队列中删除了。(1)ftok获得唯一的key值key_t ftok(const char *pathname, int proj_id);pathname就是你指定的文件名(已经存在的文件名),一般使用当前目录proj_id就是你指定的id值(2)msgget用于创建一个新的或打开一个已经存
2015-08-30 23:29:17 773
原创 Linux进程通信---共享内存 代码实现
1、什么是共享内存 共享内存可以从字面上去理解,就把一片逻辑内存共享出来,让不同的进程去访问它,修改它。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入
2015-08-30 23:05:45 2350
原创 Linux进程间通信---有名管道 代码实现
一、管道通信的注意事项 (1)执行mkfifo file命令来创建一个管道文件。[admin@localhost code]$ mkfifo pipe[admin@localhost code]$ ls -ltotal 0'''p'rw-rw-r-- 1 admin admin 0 8月 30 19:52 pipe //p就代表是管道文件(2)如果只把管道的写打开,管道是不通的,是写不
2015-08-30 20:15:37 2086
原创 Linux进程与线程的区别和联系
1、两者区别:(1)进程是比较大的单位,一个进程可以有多个线程,一个线程只能被一个进程拥有。 (2)进程是资源分配的基本单位,线程是处理机制调度的最小单位,所有的线程共享其所属进程的所有资源与代码。 (3)线程执行过程中容易同步,而进程之间需要通信进行同步。 (4)线程共享进程数据的同时,拥有自己的堆与栈。2、线程的一些优点: (1)由于线程用所属进程的一些资源,线程的划分尺度更小,并发性比
2015-08-30 19:42:49 768
原创 强制使用处于TIME_WAIT的TCP状态的socket地址
在bind函数之前添加上这句话就可以了。int isReuse = 1;setsockopt(nSocketFd,SOL_SOCKET,SO_REUSEADDR,(const char*)&isReuse,sizeof(isReuse));
2015-08-30 18:59:24 478
原创 Linux地址信息函数:获取本端和远端的socket地址
1、在某些情况下想知道一个连接着的socket的本端地址,以及远端的socket地址,可以使用下面的两个函数。获取本端的socket地址:#include <sys/socket.h>int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);获取远端的socket地址:#include <sys/socket.h>
2015-08-30 17:28:46 2356
原创 Linux C标准IO库函数详解 一
1、open/close open函数可以打开或者创建一个文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);返回值:成功
2015-08-30 14:21:37 1828
原创 Linux文件系统简介
1、文件系统里面的几个概念超级块块组描述符表数据块块位图inode节点inode位图2、概念理解 (1)超级块 在Linux系统中把磁盘分成一个个的数据块来存储数据,超级块存储整个分区的系统信息,包括 块大小,文件系统版本号,上次mount的时间等等 (2)块组描述符表 整个分区有多少个块组,就有多少个块组描述符,每个块组描述符存储该块组的信息。
2015-08-30 00:37:55 514
原创 华为机试:计算两个字符串的最大公共字串的长度,字符不区分大小写
#include <iostream>#include <string>#include <stdlib.h>using namespace std;int getCommonStrLength(char * pFirstStr, char * pSecondStr){ int i = 0, j = 0, k = 0; int count = 0, temp = 0;
2015-08-28 23:10:34 1712
原创 数据结构:C语言实现构建哈夫曼树
哈夫曼树(霍夫曼树)又称为最优树.1、路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。2、结点的权及带权路径长度 若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的
2015-08-28 15:08:12 18833 3
转载 数据结构:树、森林和二叉树的转换
1、树转换为二叉树(1)加线。在所有兄弟结点之间加一条连线。(2)去线。树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线。(3)层次调整。以树的根节点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。(注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子)2、森林转换为二叉树(1)把每棵
2015-08-28 10:24:51 1910
原创 洗牌算法:随机打乱一个数组
解题思路: 随机的取出一个(0 - n)之间的数据与a[0]交换。 随机的取出一个(1 - n)之间的数据与a[1]交换。 随机的取出一个(2 - n)之间的数据与a[2]交换。 …………….. 随机的取出一个(n-1 - n)之间的数据与a[n-1]交换。代码实现:#include <stdio.h>#include <time.h>#i
2015-08-27 11:18:29 1229 1
原创 C语言结构体的字节对齐
下面直接来看例子吧:测试环境为32位的系统以下结构体分别占多少字节:struct A {char a;char b;char c;};sizeof(A) = 3; //因为a、b、c按照1个字节进行对齐struct B {int a;char b;short c;};sizeof(B) = 8; 按照4个字节对齐: a占4字节 b占一个字节 c占2个字节 有1
2015-08-26 21:59:50 678
原创 C语言实现二叉排序树
#include <stdio.h>#include <string.h>#include <stdlib.h>/* 定义结构体 */typedef int TypeData;typedef struct stBiTreeNode { TypeData data; struct stBiTreeNode *lchild, *rchild;}BITREENODE;/*
2015-08-25 21:57:46 3033
原创 华为机试题: 字符串逆序
描述 将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。 如:输入“I am a student”,输出“tneduts a ma I”。输入参数: inputString:输入的字符串返回值: 输出转换好的逆序字符串知识点 字符串 运行时间限制 10M 内存限制 128输入 输入一个字符串,可以有空格输出 输出逆序的字符串 样例输入 I am
2015-08-25 10:08:39 3241
原创 笔试题:把一串字符串中单词逆序
例如输入: wang zheng jun输出: gnaw gnehz nuj#include <stdio.h>#include <string.h>int main(){ char str[100] = {0}; int len = 0; int count = 0; int index = 0; char ch = 0; int begin
2015-08-25 09:58:23 1509
原创 华为机试题:字符串最后一个单词的长度
描述 计算字符串最后一个单词的长度,单词以空格隔开。 知识点 字符串,循环 运行时间限制 0M 内存限制 0 输入 一行字符串,长度小于128。 输出 整数N,最后一个单词的长度。样例输入 hello world 样例输出 5#include <stdio.h>#include <string.h>int main(){ char szStr[128
2015-08-25 00:30:38 702
原创 华为2016机试题目: 最高分是多少
题目描述:老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩. 输入描述: 输入包括多组测试数据。 每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。 学生ID编号从1编到N。 第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的
2015-08-24 22:14:56 4558 2
原创 Linux命令: find命令的使用方法
1、find的匹配标准 -name file: 对文件名做精确匹配 -iname file: 对文件名匹配的时候,不区分大小写 -user USERNAME : 根据属主查找 -group GROUPNAME :根据属组查找 -iud UID :根据UID查找找 -gid
2015-08-24 15:05:39 568
原创 Linux命令:sort的使用方法
1、sort的字段选择sort file -n : 数值排序 -r : 逆序排序 -t : 字段分隔符 -k : 以哪个字段为准,来进行比较 -u : 重复的,只显示一次 2、示例该目录下有一个test.c的文件,文件内容如下:nii@mch:~/code$ cat test.c l
2015-08-24 14:09:41 1270
原创 Linux命令: cut命令的使用方法
1、cut用法(文本显示剪切) -d : 制定字段分隔符,默认是空格 -f :制定要显示的字段 -f1 :显示第一个字段 -f 1,3 显示第一个和第三个 -f 1-3 显示第一个到第三个 -b : 显示字节数 -c : 显示字符2、示例
2015-08-24 10:30:31 6441
原创 Linux多线程如何避免死锁
1、线程死锁产生的必要条件:(1)互斥条件:一个资源每次只能被一个进程使用。 (2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3)不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。2、如何避免死锁&bnsp;网上对于如何避免死锁方法很多,我在这里列举两个比较常用的方法。(1)设
2015-08-23 23:09:40 2063
原创 Linux命令:head,tail命令使用方法
1、head命令head -n查看文件的前n行2、tail命令tail -n查看文件的后n行 tail -f file:该命令特别有用,可以一直显示追加到文件后面的内容
2015-08-23 22:45:57 879
原创 查看ubuntu系统的版本号和内核版本号
1、查看版本号 cat /etc/issuenii@mch:~$ cat /etc/issueUbuntu 15.04 \n \l2、查看内核版本 uname -anii@mch:~$ uname -aLinux mch 3.19.0-23-generic #24-Ubuntu SMP Tue Jul 7 18:52:29 UTC 2015 i686 i686 i686 GNU/Linux
2015-08-23 22:33:08 4148
原创 Linux命令:ls命令使用方法
ls 直接显示该目录下的文件 -l: 长格式显示 -h: 做单位转换 -a: 显示以.开头的隐藏文件 -d: 显示目录自身属性 -r: 逆序显示 -i: 正序显示,前面可以显示inode号 -R: 递归显示(recursive)
2015-08-23 22:19:08 786
原创 C++的 函数模板和模板函数、类模板和模板类区别
1、函数模板和模板函数函数模板:函数模板的重点是模板。表示的是一个模板,专门用来生产函数。template <typename T> void fun(T a) { } 模板函数:是模板函数的实例化fun(7);//隐式生成fun <int> fun(3.9);//隐式生成fun <double> fun(‘b’);// 隐式生成fun <char> Shape* p
2015-08-23 22:05:42 2042 4
原创 Linux内核有什么功能?
1、进程管理 内核负责创建和销毁进程, 并处理它们与外部世界的联系(输入和输出). 不同进程间通讯(通过信号, 管道, 或者进程间通讯原语)对整个系统功能来说是基本的, 也由内核处理. 另外, 调度器, 控制进程如何共享 CPU, 是进程管理的一部分. 更通常地, 内核的进程管理活动实现了多个进程在一个单个或者几个 CPU 之上的抽象.2、内存管理 计算机的内存是主要的资源, 处理它所用的策略对系统
2015-08-23 00:36:41 8699
原创 PAT 1010 月饼
题目描述 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2
2015-08-21 23:10:33 981
原创 PAT 1017 A除以B (大数相除)
题目描述 本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。输入描述: 输入在1行中依次给出A和B,中间以1空格分隔。输出描述: 在1行中依次输出Q和R,中间以1空格分隔。输入例子: 123456789050987654321 7输出例子: 17636684150141093474 3#include <io
2015-08-21 19:02:21 1155
原创 PAT 1006部分A+B
题目描述 正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。现给定A、DA、B、DB,请编写程序计算PA + PB。输入描述: 输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010。输出描述: 在一行中输出PA + PB的值。输入例子:
2015-08-21 16:28:39 589
原创 数据结构 C语言实现希尔排序
一、希尔排序简介 先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,二、C语言代码实现#include <stdio.h>/* 将两个数据交换 */void swap(int*
2015-08-19 22:25:10 1562 1
原创 数据结构 C语言实现直接插入排序
一、直接插入排序简介 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。 第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。二、C语言代码实现#include <stdio.h>/* 将两个数据交换 */void swap(in
2015-08-19 18:03:46 4051
原创 数据结构 C语言实现冒泡排序
一、冒泡排序简介冒泡排序是相邻的两个数进行比较,每次把最大的或最小的放到后面。二、代码实现#include <stdio.h>/* 将两个数据交换 */void swap(int* Ina , int* Inb){ int temp = *Ina; *Ina = *Inb; *Inb = temp;}/** 函数功能:冒泡排序,把数据从小到大排序* 参数解释:In
2015-08-19 15:04:37 5018
原创 数据结构 C语言实现选择排序
一、选择排序简介选择排序是外层进行n-1趟排序,内层进行n-1趟排序,每一趟选出最大或最小的数据放在最前面。二、代码实现#include <stdio.h>/* 将两个数据交换 */void swap(int* Ina , int* Inb){ int temp = *Ina; *Ina = *Inb; *Inb = temp;}/** 函数功能:选择排序,把数据从
2015-08-19 14:59:17 800 1
原创 数据结构 C语言实现快速排序
一、快速排序简介快速排序采用分治的思想,第一趟先将一串数字分为两部分,第一部分的数值都比第二部分要小,然后按照这种方法,依次对两边的数据进行排序。二、代码实现#include <stdio.h>/* 将两个数据交换 */void swap(int* Ina , int* Inb){ int temp = *Ina; *Ina = *Inb; *Inb = temp;}
2015-08-19 14:43:50 1718
基于Lire库搜索相似图片源码
2018-07-22
Zookeeper客户端Curator Framework使用代码
2018-05-05
cas单点登录测试配置
2018-04-29
Android的APp作为Socket服务端与pc通过USB通信
2016-05-14
Android作为Socket服务端与pc通过USB通信
2016-05-14
java swing入门教程
2016-03-16
福星阅读器
2016-03-15
局域网QQ聊天项目
2015-09-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人