自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

耗纸的博客

没事看看书,学学习,扯扯淡

  • 博客(23)
  • 收藏
  • 关注

原创 从0开始<十四>:模仿malloc和 free函数、strlen函数

程序一:编写函数char *alloc(n) 和 void afree(char *p)函数,这两个函数类似于malloc和free函数,其中第一个函数返回一个指向n个连续存储单元的指针,第二个函数释放已经分配单元的指针。思路:最容易实现方法是让一个大字符数组allocbuf中的空间进行分配。该数组是alloc和afree两个函数的私有数组。由于函数alloc和afree处理的对象时指针而不是

2015-10-28 22:13:51 876

原创 从0开始<十三>:getint()函数(类似于scanf函数)以及库函数strncpy、strncat及strncmp函数的实现

程序一:编写getint(int *pn)函数#include #include #define BUFSIZE 100char buf[BUFSIZE];int bufp = 0; /*buf中下一个空闲位置*/int getch(void);void ungetch(int);int getint(int *pn);int main(void){ int i,ar

2015-10-28 21:50:23 2024

原创 从0开始<十二>:strcpy、strcmp、strcat函数的实现

程序一:strcpy函数的实现解法一:数组实现版本void strcpy(cahr *s, char *t){ int i; i = 0; while ( (s[i]=t[i]) != '\0') i++;}解法二:指针实现的几个版本void strcpy(cahr *s, char *t){ while ( (*s=*t) != '\0') { s++;

2015-10-27 16:02:07 634

原创 Linux<十> 开机关机启动与多重启动

开机流程分析Linux的开机流程 加载 BIOS 的硬件信息,并取得第一个开机装置的代号;读取第一个开机装置的 MBR 的 boot Loader (亦即是 lilo, grub, spfdisk 等等) 的开机信息;加载 Kernel 操作系统核心信息, Kernel 开始解压缩,并且尝试驱动所有硬件装置;Kernel 执行 init 程序并取得 run-level 信息;init 执

2015-10-27 14:43:29 602

原创 从0开始<十一>:简单计算器实现

程序:编写一个具有加、减、乘、除四则运算功能的计算器程序。思路:用逆波兰法来实现,在逆波兰法中,所有运算符都跟在操作数后面,比如以下中缀表达式中:(1-2)*(4+5)采用逆波兰法表示为:12-45+*;逆波兰法中不需要括号,只需要知道每个运算符需要几个操作数就不会引起歧义。实现:没遇到数就把它压入栈中;当一个运算符到达时,从栈中弹出相应的操作数即可,并把运算结果再压入栈中。到达行末尾

2015-10-26 19:05:11 581

原创 从0开始<十>:atof 函数的简单实现

程序一:atof函数的简单实现解法思路很简单,就不多说double atof(char s[]){ double val,power; int i,sign; for (i=0; isspace(s[i]); ++i); sign = (s[i]== '-') ? -1 : 1; if (s[i]=='+' || s[i]=='-') ++i; for (val=0.

2015-10-26 18:30:48 859

原创 C语言<四> 函数与程序结构

函数的基本知识如果函数定义中省略了返回值类型,则默认为int类型返回值:如果某个函数从一个地方返回时有返回值,而从另一个地方返回时没有返回值,该函数并不非法,但可能是一种出问题的征兆。程序的加载:不同系统中,保存多个源文件中的C程序的编译和加载机制是不同的,这里看下Unix系统,假设有三个函数分别存放在main.c getline.c strindex.c,则可以使用命令cc main.c g

2015-10-25 14:27:04 561

原创 从0开始<九> 字符串相关:grep函数的简单实现

程序一:grep函数的简单实现思路:先看流程,其中可用前面的getline实现未处理的行,然后编写函数strindex(s,t)实现该目标,至于打印部分使用printf函数即可while (还有未处理的行){ if (改行包含指定的模式) 打印该行 }#include #define MAXLINE 1000 int getline(char line[], int m

2015-10-24 21:06:15 716

原创 从0开始<八>:二分法(两种方式)

程序一:编写二分法程序解法:很常见,很经典,不多说int binsearch(int x, int v[], int n){ int low,high,mid; low = 0; high = n-1; while (low <= high) { mid = (low+high)/2; if (x < v[mid]) high = mid - 1; else

2015-10-20 23:13:09 532 1

原创 C语言<三>-控制流

语句和程序块语句以”;” 结尾用一堆花括号”{“和”}”把一组声明括在一起就构成了一个复合语句,右括号用以结束程序块,其后不需要分号if-else、switch语句就说说switch语句吧,老不用,都快忘了 switch语句是一种多路判定语句,它测试表达式是否与一些常量整数值中的某一个值匹配,并执行相应的分支动作,形式如下switch (表达式){ case 常量表达式: 语句序列

2015-10-20 21:49:59 683

原创 从0到开始<七>:字符串相关及位运算

程序一:编写函数any(s1,s2),将字符串s2中的任意字符在字符串s1中第一次出现的位置作为结果返回。如果s1中不包含s2中的字符,则返回-1。(标准库函数strpbrk(其头文件是string.h)具有同样的功能,但它返回的是指向该位置的指针)解法一:O(n*m)的时间复杂度,这个简单int any(char s1[], char s2[]){ int i; int j;

2015-10-19 20:20:08 440

原创 Linux<九>程序与资源管理

再次强调man用法当需要查询某个指令时候,用man command 或 info command即可。 如一下两个命令: man 5 passwd man passwd 其中第二个显示的是/usr/bin/passwd这个执行文件的使用方法介绍,但是加一个参数5后,就自动变成了/etc/passwd这个文件的设定功能了。Linux中使用man时,参数配置文件的查询都是以5来设定的 为什么?

2015-10-19 10:02:19 463

原创 从0开始<六>:位运算符相关

程序一:编写一个函数getbits(x,p,n),它将返回x中从右边数第p位开始向右边n位的字段,这里假定右边第一位是第0位,n和 p都是合理的正值先看程序:(先把指定为移到最右边,然后再与1与,即取出来即可)unsigned getbits(unsigned x, int p, int n){ return (x >> (p+1-n)) & ~( ~0 << n);}问题一:什么叫

2015-10-18 22:07:30 409

原创 从0开始<五>:字符串相关-htoi函数,删除字符串中指定字符

程序一:编写函数htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0-9,a-f,A-F解法一:(放宽了规则)#include #include /* Here's a helper function to get me around the problem of not * having strchr *

2015-10-17 21:05:22 451

原创 从0开始<二>:1

程序一:如何测试单词计数程序呢?如果程序中存在某种错误,那么什么样的输入最可能发现这类错误。程序二:编写一个程序,以每行一个单词的形式打印其输出解法一:设置标志,#include int main(void){ int c,flag; flag = 0; while ( (c=getchar()) != EOF) { if (c==' ' || c=='\t'

2015-10-10 22:08:04 500

原创 <二>类型、运算符与表达式

字节长度short与 int类型至少得是16位,而long类型至少是为32位,且short类型不得低于int类型,而int类型不得长于long类型,限定符signed与 unsigned可用于限定于char类型或任何整型,若类型为n位,则unsigned 为0-2^n -1;而signed为-2^(n-1)-2^(n-1)-1;long、float、double类型可以表示高精度的浮点数,有关

2015-10-08 20:10:02 473

原创 <一> 导言

getchar()函数原型:int getchar(void) 一个简单的程序:#include <stdio.h>int main(void){ int c; while ((c=getchar()) != EOF) putchar(c); return 0;}其中(c=getchar())表达式的值为c为了解决区分有效输入和文件结束符,C语言采用E

2015-10-05 20:42:29 616

原创 <七>账号管理

账号管理登入Linux主机流程 先查找/etc/passwd中是否有这个账号,如果没有则跳出,有则将其UID,GID,和该账号的目录及对应的shell设定读出来核对密码,主要从/etc/shadow进入shell 所以说在登入Linux时,必须读取上诉两个文件,这也是狠毒攻击者会将特殊账号写到 /etc/passwd中的原因认识/etc/passwd和/etc/shadow passw

2015-10-05 19:27:21 486

原创 <六>初识shell scripts

一个简单的脚本脚本可以不会写,但是要会看,会改,当然会写最好啦#!/bin/bash name="Linux"name1="My name is $name"name1='My name is $name'echo $name1echo $name2名为test.sh 执行 sh test.sh,第一行声明使用的 shell。(PS:顺便看下单引号和双引号的区别)运算符declaresh

2015-10-05 14:12:58 482

原创 <五> 文件的压缩与打包

在windows下我们接触最多的压缩文件就是.rar格式的了。但在linux下这样的格式是不能识别的,它有自己所特有的压缩工具。但有一种文件在windows和linux下都能使用那就是.zip格式的文件了,在linux下最常见的压缩文件通常都是以.tar.gz 为结尾。除此之外还有.tar, .gz, .bz2, .zip等等。以下介绍常见的后缀名所对应的压缩工具 1. .gz gzip 压缩工具

2015-10-04 21:36:20 437

原创 <四>初识Bash

Bash Shell记录命令历史 我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中,但只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。指令和文件名补全 (Tab箭)别名 别名:alias [命令别名]=[‘具体的命令’],例alias a

2015-10-03 14:09:24 493

原创 Linux<三>文件的基本操作

文件常用命令cd 与 pwd:变换目录和显示当前目录 pwd -P:会以显示文件的真正位置,若此文件是一个连接文件的话。mkdir 与 rmdir(一般rm用的多) : 建立目录和删除目录环境变量PATH:当我们执行一个指令时,会先到PATH中路径查找,先查找到的指令先被执行 查看:echo $PATH 添加:如将/root添加到环境变量PATH=$PATH:/root执行自己写的程序

2015-10-02 14:19:18 498

原创 Linux<一>:Linux启动及登陆

Linux启动过程内核的引导->运行init->系统初始化->建立终端->用户登录系统 - 内核的引导 BIOS开机自检 ->grub程序开始引导Linux->Linux从它们手中接管了CPU的控制权进行内核引导->加载init程序(/sbin/init) - 运行init init 进程是系统所有进程的起点,最主要的功能就是准备软件执行的环境,系统的主机名、网络设定、语言、文件系统格式及其

2015-10-01 20:08:50 670

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除