c
文章平均质量分 68
yehenhei
这个作者很懒,什么都没留下…
展开
-
KMP算法2
这是转载,有问题请找作者,作者有问题请自己解决。http://www.cnblogs.com/houkai/p/3978550.html以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货。最近有空,翻出来算法导论看看,原来就是这么简单(先不说程序实现,思想很简单)。模式匹配的经转载 2015-08-14 12:19:04 · 439 阅读 · 0 评论 -
KMP算法
本文的转载,有问题请找作者作者: 阮一峰日期: 2013年5月 1日字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名转载 2015-08-14 12:07:01 · 263 阅读 · 0 评论 -
dup2()功能实现
//用dup()来返回文件描述符,直到符合要求的为止,最后再把不符合要求的关闭 //当输入的描述符是负的或者已超过MAX_OPEN时,会出错 #include //dup() #include #include #define OPEN_MAX 256 int my_dup2(int, int); int ma转载 2016-05-28 15:50:55 · 895 阅读 · 0 评论 -
whoami实现
有专门记录uid与username的函数,struct passwd *getpwuid(uid_t uid)可以直接在shell下执行$ man getpwuid查看这个函数及其相关用法,很详细代码:[cpp] view plain copy #include #include转载 2016-10-10 23:35:57 · 927 阅读 · 0 评论 -
获得当前终端名称
Linux系统中提供了ttyname函数,用于判断某个打开的文件描述符是否是某个终端设备。如果是,则返回终端设备的名称,该函数的具体信息如表6.1所示。表6.1 ttyname函数说明:ttyname函数用于返回终端的名称,其中fd为打开终端而获得文件描述符。表6.1 ttyname函数头文件函数形式char *t转载 2016-10-10 23:44:58 · 4592 阅读 · 0 评论 -
关于struct dirent 中d_name成员在某些系统中为1的问题。
此为伸缩型结构成员的问题,详见c primer plus中相关章节1楼 发表于 2007-9-19 23:19 我在书中看到有以下结构描述.struct dirent{..............char a[1];}其中a[1]是文件名地址.也有的书用a[255]描述.我对此非常不解,a[1]怎么能放文件指针呢,作为字符数组,也只能够放'/0'.转载 2016-10-14 19:01:54 · 879 阅读 · 0 评论 -
SEED实验系列:SET-UID程序漏洞实验
文详细出自http://www.shiyanlou.com/courses/227,转载请注明出处。实验室链接一、实验描述Set-UID 是Unix系统中的一个重要的安全机制。当一个Set-UID程序运行的时候,它被假设为具有拥有者的权限。例如,如果程序的拥有者是root,那么任何人运行这个程序时都会获得程序拥有者的权限。Set-UID允许我们做许多很有趣的事情,但是不幸的是,它也是很转载 2016-10-15 10:21:42 · 4516 阅读 · 0 评论 -
Linux下文件的阻塞与非阻塞对部分系统调用的影响
1.基本概念所谓的阻塞,即内核在对文件操作I/O系统调用时,如果条件不满足(可能需要产生I/O),则内核会将该进程挂起。非阻塞则是发现条件不满足就会立即返回。此外需要注意的是非阻塞并不是轮询,不然就和阻塞没多大区别了,它只是调用不成功就直接返回了,不会在去看啥时候会满足条件,而是有你自己去选择接下来该咋办,系统以不再负责2.read/write阻塞与非阻塞的理解read/w转载 2016-11-28 19:02:27 · 588 阅读 · 0 评论 -
RSA算法原理(二)
作者: 阮一峰日期: 2013年7月 4日上一次,我介绍了一些数论知识。有了这些知识,我们就可以看懂RSA算法。这是目前地球上最重要的加密算法。六、密钥生成的步骤我们通过一个例子,来理解RSA算法。假设爱丽丝要与鲍勃进行加密通信,她该怎么生成公钥和私钥呢?第一步,随机选择两个不相等的质数p和q。爱丽丝选择了61和53。转载 2015-03-27 14:09:56 · 391 阅读 · 0 评论 -
RSA算法原理(一)
本文摘自网络,原作者以下注明,转载此处只为以后深入理解学习,如有转载,请注明原作者。作者: 阮一峰日期: 2013年6月27日如果你问我,哪一种算法最重要?我可能会回答"公钥加密算法"。因为它是计算机通信安全的基石,保证了加密数据不会被破解。你可以想象一下,信用卡交易被破解的后果。进入正题之前,我先简单介绍一下,什么是"公钥加密算法"转载 2015-03-27 13:59:27 · 407 阅读 · 0 评论 -
指针学习需要结合运算符的优先级
关于指针的学习,很多人会和我有着相同的感受,那就是一个字:难!翻阅过非常多的资料,有很多人喜欢把这些难点的知识神圣化,让我们这些菜鸟觉得更加的高深,比如有把指针说成是一门艺术(当初我看到这个名字就对指针有点怕了……),可是知识本来不管有多复杂总不就那么一回事嘛。查询了很多资料,终于找到一篇很有价值的关于指针的文章,里面内容写的很好,特摘录过来和大家分享,不知道是哪位高人写的,始终没找到链接,在此先转载 2015-03-04 15:35:57 · 1293 阅读 · 0 评论 -
C 中scanf ( ) 函数用法 心得
声明:本文转载csdn中iin.han的专栏, 我觉得,在输入输出函数中,scanf()函数,应该是最麻烦的,有时它给我们的结果很可笑,但是一定是一原因的....首先声明一下,这篇日志不是介绍scanf()中各种格式符用法的文章(没有这个必要,但是大家一定要会用).我尝试了很多种输入,包括一些错误的练习,曾经对scanf()由迷茫转向清醒,又由清醒再次转向迷茫......不知道何时转载 2011-11-28 21:49:12 · 576 阅读 · 0 评论 -
C专家编程精编之一 (自己看的有点累)
声明:本文转载csdn中iin.han的专栏 C专家编程 精编之一 第一章~第三章C的复杂之处 在于它的指针 ,但是比其指针更为复杂的是它的声明 !!!你能看懂它们的意思 吗?apple=sizeof(int)*p ; apple=sizeof * p;j= (char (*)[20])malloc(20); int const * g转载 2011-11-28 21:53:05 · 733 阅读 · 0 评论 -
浅析求素数算法(部分看不懂,保存以后来看)
浅析求素数算法时间: 2006-10-27注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度1. 根据概念判断:如果一个正整数只有两个因子, 1和p,则称p为素数.代码:bool isPrime(int n){ if(n < 2) return false; for(int i = 2; i转载 2010-11-29 00:22:00 · 960 阅读 · 0 评论 -
插入排序
参考1:插入排序是最简单最直观的排序算法了,它的依据是:遍历到第N个元素的时候前面的N-1个元素已经是排序好的了,那么就查找前面的N-1个元素把这第N个元素放在合适的位置,如此下去直到遍历完序列的元素为止.算法的复杂度也是简单的,排序第一个需要1的复杂度,排序第二个需要2的复杂度,因此整个的复杂度就是1 + 2 + 3 + ... + N = O(N ^ 2)的复杂度.转载 2013-10-09 16:32:46 · 416 阅读 · 0 评论 -
C语言各种编译器的清屏方法
1,vs/vc:vs本身并没有提供专用清屏的函数,但是清屏被作为windows专用的可执行程序了,因此可以使用system("cls")来手动开启进程完成清屏。2,tc:清屏函数clrscr() 总结:在windows下无论你使用什么编译器,都可以使用system("cls")来清屏。同理,在linux下肯定可以调用清屏命令system("clear")来完成清屏。转载 2013-12-29 23:33:13 · 8924 阅读 · 2 评论 -
交换两个变量的值,不使用第三个变量
通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。代码如下:int a,b;a=10; b=15;int t;t=a; a=b; b=t;这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一般情况下碰到交换变量值的问题,都应采用此算法(以下称为标准算法)。转载 2014-01-09 23:16:22 · 638 阅读 · 0 评论 -
判断两个整数相加是否溢出的方法
对于C/C++语言来说,分为无符号整数和有符号整数两种,几乎在所有机器中他们都是用补码表示的,发生溢出不会报警,只是将最高位直接截断。判断两个整数相加是否溢出的方法如下:(1)无符号整数相加int uadd_ok(unsigned x, unsigned y){ unsigned z = x + y; if(z return转载 2014-01-13 23:28:17 · 2794 阅读 · 0 评论 -
printf %g 是啥?
printf 格式化输出 有很多种可以选择的格式化方式。通常我们最多使用的就是 %s %d %f %c 等。其实还有一些别的选择。配合数字选项,可以灵活实现一些特定的东西。 MSDN中的说法:c int or wint_t When used with printf functions, specifies a single-byte character; when us转载 2014-06-17 18:39:02 · 930 阅读 · 0 评论 -
临时文件
ISO C标准I/O提供了两个函数以帮助创建临时文件。#include char*tmpnam(char*ptr);//返回指向唯一路径名的指针;FILE*tmpfile(void);//成功则返回文件指针;失败返回NULL;tmpnam产生一个与现在文件名不同的一个有效路径名字符串。每次调用它时,它都产生一个不同的路径名,最多调用次数是TMP_MAX(23832转载 2014-07-11 13:18:40 · 880 阅读 · 0 评论 -
Linux系统的命令源代码的获取方法
我们知道,Linux是开源的,它自带的功能强大的命令也是开源的,也就是说,我们可以获得这些命令的源代码并研究它。那究竟如何获得系统的命令的源代码呢?命令的源代码是一个软件包为单元的,放在一个软件包的源代码中,若要下载一个命令的源代码,就要把这个命令所属的软件包的源代码都下载下来。命令的源代码就在下载的源代码的相关目录内,通常是src目录,相应的主文件名为cmd.c,其中cmd为具体的命转载 2016-11-19 13:44:24 · 636 阅读 · 1 评论