- 博客(59)
- 收藏
- 关注
原创 个人感想
相信各位看客在计算机方面的造诣比我高太多,我就不班门弄斧谈计算机了。 作为一个试图脚踏建筑与计算机两条船的人,谈谈自己的简短感触。首先,必须要提一点,建筑绝不是画画,它是一门极其综合的学科,需要建筑师用历史、理论、方法以及经济、社会、政治来解决空间,交通,造型,结构等问题。在这个过程中必须要有严密的逻辑推导,才能有理有据地说服老师。 建筑设计相对于软件开发,在设计层面上处于更高维;建筑师相对于软
2015-04-27 23:56:56
707
原创 带简易验证码网站自动注册及登录(勿转)
目标网站:www.k780.com 语言:python 任务:自动注册并登录网站爬取用户信息1、分析post包 http://www.k780.com/?q=account&type=register。由于此网站注册时不需要验证邮箱,所以只需要伪造post包骗过服务器即可完成注册。 抓取浏览器注册时的post内容,header部分用于模拟浏览器请求,body部分用于填写表单。header:
2015-04-27 19:06:01
9444
1
原创 tar命令
-c: 建立压缩档案 -x:解压 -t:查看内容 压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。 -z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出 下面的
2015-04-27 19:02:53
613
原创 ppc64 安装jdk
无gcc,有python2.6,linux6.4,ppc64架构配置yumwget 121.40.123.189/yum-metadata-parser-1.1.0-2.fc7.ppc64.rpmibm ppc64 jdk https://iwm.dhe.ibm.com/sdfdl/1v2/regs2/linuxjavasdks/java/java7v1/7.1.2.0/linuxppc64/Xa.
2015-04-27 19:02:11
2454
原创 《Unix/linux编程实践教程》第二章部分习题相关知识整理
open和fopen的区别(2.3)1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操
2015-04-27 19:00:08
747
原创 《Unix/linux编程实践教程》第三章部分习题
3.10(控制ls分栏输出) ls的分栏输出如图所示,有两个特点:1、每一栏(列)的宽度有这一栏最长的文件名决定2、显示的栏数受终端显示器的宽度影响。所以,如何确定输出行与列的总数成为关键。 显然,有两种方法供选择:先确定行数再确定列数,与先确定列数再确定行数。 我们已知的可确定的条件只有2个:1、终端的宽度2、所有的文件名。文件名分栏显示是二维的,而终端宽度是一维的,x轴方向的。所以如果
2015-04-27 18:59:10
1176
原创 Unix文件系统(二)
之前简要介绍了一下文件系统,要真正弄清楚一些内核系统还是要回到内核,以ext2文件系统为例。 一块磁盘可以格式化出多个分区,一个分区对应一种文件系统。ext2将整块分区划分为两大部分:一个默认的启动块和若干块组,启动块(Boot Block)用于存储分区的描述信息和启动信息,大小固定为1K。而启动块之后的块组才是ext2真正开始的地方。 块组(Block Group)由六部分组成:1、超级块(S
2015-04-27 18:58:07
723
原创 Unix文件系统(一)
此文着重介绍系统是如何表示目录的以及pwd命令的编写。我们都知道Unix将磁盘分为三部分:超级块(superblock),节点表(inode table)以及数据区。超级块中记录文件系统本身的结构信息。节点表中记录文件的属性,文件系统中每个文件在表中都至少有一个i-节点,表中每个节点的大小相同。数据区就是文件数据真实的存储位置。简要介绍磁盘知识后,我们来谈谈目录。在Unix中,目录是包含了文件名字列
2015-04-27 18:55:50
934
原创 文件和目录操作的系统函数(整理)
我们平时常用cp,mv,chmod,mkdir等命令,却不太清楚他们的系统调用。在《Linux C一站式学习中》的ext2文件系统中详细介绍了文件和目录操作的系统函数,理解了这些系统函数的实现原理之后,对于文件及目录操作命令也会有更深的理解,整理如下:stat(2)函数读取文件的inode,然后把inode中的各种文件属性填入struct stat结构体传出给调用者。stat(1)命令是基于stat
2015-04-27 18:53:44
983
原创 《Unix/linux编程实践教程》第四章部分习题
4.4 Inode Bitmap和Block Bitmap4.7 目录链接数指有多少个目录指向此目录。如/a/b/,假设b为空,对于b目录来说有”.”和”..”两个目录,其中”.”指向自身,同时在a目录中有指向b目录的链接。因此,一个目录的目录链接数至少为2.4.9 mount时如果挂载点不存在则无法mount,如果挂载点存在且包含文件和子目录,则原有文件将不可见。4.11 柱面组与之前所说的块组(
2015-04-27 18:52:56
849
原创 设备控制小结
Unix系统中一切都是文件的概念深入人心,设备同普通文件及目录一样,同样是一种文件,但与普通文件存在许多区别。 首先体现在文件属性上:如图所示。除了权限最开头的字符变为”c”,在原本应该显示SIZE的地方显示了16,1这样的数字。 这里就引出了设备文件的一个重要的特点,普通的文件是一个存储数据的容器,size记录文件容纳的数据量;而设备文件是链接,而非容器。对于设备文件来说,i-节点存储的是
2015-04-27 18:52:19
418
原创 《Unix/linux编程实践教程》第六章部分习题
这一章的习题比较简单,主要都是让读者熟悉终端控制与信号的属性,如非规范属性,不回显等。 这里主要通过最后一题(6.12)来熟悉一下本章知识。 程序需要读取终端行数与列数,将A字母打印row*col次,若窗口大小改变,则打印B并以此顺延。当按下‘Q’,则清屏并退出。获取终端的行列需要winsize结构体: struct winsize { unsigned short ws_r
2015-04-27 18:52:09
893
原创 终端控制与信号浅析
终端控制程序在终端显示时会与程序本身有一些出入,比如在运行下面这段代码时运行时直接按回车,则两次的输出结果都是10,即\n的ASCII码。在printf输出\n时,终端显示\r\n,在getchar读入的时候ENTER,又被处理成\n。又比如我们都知道程序的I/O有缓冲区,能够暂存程序输入输出的信息等特点。#include "stdio.h"int main(int argc, char const
2015-04-27 18:51:40
852
原创 mac os 10.9及unix/linux 64位编译curses函数失败
错误提示Undefined symbols for architecture x86_64: "_cbreak", referenced from: _main in bounceld-Pf86fR.o "_endwin", referenced from: _main in bounceld-Pf86fR.o "_initscr", referenced fro
2015-04-27 18:50:21
1301
2
原创 时钟编程: alarm和setitimer
alarm 我们知道,sleep(n)函数可将进程挂起n秒,而其在实现上主要依靠alarm系统调用,sleep的工作原理有3部分组成: 1、为SIGALRM设置一个处理函数; —->SIGALRM为alarm计时n秒后发出的信号 2、调用alarm(n); —->设定一个计时器 3、调用pause. —->进程一直阻塞在pa
2015-04-27 18:50:05
2153
原创 KMP算法理解
KMP算法的理解着实花了不少时间,幸好网上前辈的博客写得都相当好,结合几篇博客仔细想想还是可以理解的,这里仅做一下整理。KMP算法概念理解看这篇博客就够了字符串匹配的KMP算法by阮一峰 主要的逻辑那篇博客都有讲,求出next数组,进行简单的加减即可完成匹配。至于求解next数组,则是KMP算法的关键也是难点所在。 需参考以下两篇博客: 1、http://www.cnblogs.com/c-c
2015-04-27 18:48:11
376
原创 信号浅析(二)
之前简要地学了一些信号的基础知识,我们知道,没有前后冲突等bug的话,信号的作用非常棒,通过信号处理函数,可以实现许多异步操作。然而当有多个信号或同步或异步进入的时候,如果默认操作,则会有很多问题出现。要解决多个信号如何处理,必须要了解信号的处理机制。有哪些信号处理机制? 假设内核正在做某件事,这时信号A过来了,内核立刻将这件事挂起并赶忙去处理信号A;然而这时,当内核正在处理信号A的时候,信号B又
2015-04-27 18:48:07
392
原创 编写命令解释器(二)
我们在之前的sh的基础上再添加进一些shell的功能。 先让sh可以一次性接收一整串的命令(程序名及参数),而不是一次一个的按照提示输入。这就需要一个函数将输入作为一个大数组储存起来,再打散存入arglist中。char **splitline(char *line){ //line即为输入所存入的大数组 char *cp = line; int a
2015-04-27 18:45:28
615
原创 编写命令解释器sh(一)
之前由于终于了结了一段心事,荒废了半个月没写博客,浑浑噩噩。果然代码是有这种魔性,长久不写手痒痒。之后还是得坚持更新,也把这几天粗粗学的python整理一下补上,下面言归正传。shell我们都很熟悉,我们输入一些命令(如ls、cat、touch等),得到结果。ls等命令实际上都对应于磁盘上的某个程序。shell运行这些程序,得到运行结果。Unix将运行中的程序定义为进程,它对于于计算机内实际的实体:
2015-04-27 18:36:37
622
原创 I/O重定向和管道
学习I/O重定向之前需要知道什么是文件描述符,文件描述符是一个数组的索引号。每个进程都有其打开的一系列文件,这些打开的文件被保持在一个数组中,文件描述符就是某文件在此数组中的索引。一个文件描述符对应于一个文件。unix中大多数程序从stdin中读入数据,输出到stdout。stdin和stdout分别对应于文件描述符0和1。要实现I/O重定向,主要的任务就是让程序原本从stdin中读入和输出到
2015-04-27 18:27:21
536
原创 目录及文件属性
通过ls命令熟悉目录与文件的基础属性很有帮助,先通过如何获取ls的信息,再到理解ls所表示的信息的含义,深入浅出。现在自己的学习心态也不一样,复习之前知识之后,理解深入了很多。ls的整体实现逻辑很简单,主要就是通过DIR, dirent, stat三个结构体,层层解析,获取到由简入深的文件及目录信息。但三个结构体的关系与含义却比较复杂,下面详解:结构体DIR,是最开始的步骤,由目录路径获取
2015-04-27 18:22:46
455
原创 文件及目录特殊属性
檔案的特殊屬性 SUID/SGID/SBITSet UID (SUID);設置使文件在執行階段具有文件所有者的權限。SUID 典型的的例子為 /etc/passwd。帳號與密碼存放於 /etc/passwd 與 /etc/shadow。而 /etc/shadow 的權限為 『-r--------』,且擁有者為 root。一般身份使用者要更新自己的密碼,執行 /usr/bin
2015-04-27 18:22:12
394
原创 C语言FILE结构体以及缓冲区深入探讨(unix/linux编程实现2.4)
在C语言中,用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。定义文件指针的一般形式为: FILE *fp;这里的FILE,实际上是在stdio.h中定义的一个结构体,该结构体中含有文件名、文件状态和文件当前位置等信息。我们通过fopen返回一个文件指针(指向FILE结构体的指针)来进行文件操作。
2015-04-27 18:21:46
1884
1
原创 open和fopen的区别(unix/linux编程实现2.3)
1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行
2015-04-27 18:18:12
599
1
原创 more指令的实现及文件操作函数
Unix中的more指令是用作分页显示大量信息,并能够进一步接收用户的指令来进行后续显示的命令。使用其可以直接more也可以用管道重定向。可接收的指令有q(退出),空格(新一页)及回车(新一行)。同时还有阅读百分比等信息。以下用c将其简单实现:在其中使用了文件读取函数fgetc,fputc等,此类函数通过文件指针直接对文件的内容进行读写,感觉挺有用的,简单介绍一下。char
2015-04-27 16:44:10
994
原创 现代建筑认知ppt摘要
对于建筑的分析必定要依靠语言,依靠一步步的拆解;对于建筑的整合,尤其是最后的那一次飞跃,却不是线性逻辑所能够抵达的。而对于场地限制性的突破往往是那关键性的突破,可能需要给人一种片段式的瞬时的体悟。对于建筑师而言,诗意,总意味着某种反向的力量,或者自我的克制。你是斯卡帕,可以大把地做走廊,做细部,那也需要某种深刻的概念,需要某种目的性,比如,是把人领进一个展览馆,或是进入一个学院。这样,你才
2015-04-27 15:33:07
921
转载 tcp与udp缓冲区大小总结
1.tcp收发缓冲区默认值 [root@localhost /]# cat /proc/sys/net/ipv4/tcp_rmem4096 87380 419430487380 :tcp接收缓冲区的默认值 [root@localhost /]# cat /proc/sys/net/ipv4/tcp_wmem4096 16384 4194304163
2015-04-27 15:32:19
1827
转载 Windows转到linux中,文件乱码,文件编码转换
Windows转到linux中,文件乱码,文件编码转换最近,学习又重新开始Linux学习,所以一直在Centos中,昨天一朋友把他在Windows下写的C程序发给我,我欣然答应,本以为很快就能在我的Linux系统中运行起来。没想到出现了乱码,结果想把这个问题解决,一下子就搞了近三个小时没有解决。今天,又想起来这个问题,竟然一下子就解决了,现在把学到的一些东西总结如下。 首先Wi
2015-04-27 15:31:52
693
原创 struct ethhdr、ether_header、iphdr、tcphdr、udphdr结构体定义
struct ethhdr {unsigned char h_dest[ETH_ALEN];unsigned char h_source[ETH_ALEN];__be16 h_proto;} __attribute__((packed));struct ether_header{u_int8_t ether_dhost[ETH_ALEN]; // dest
2015-04-27 15:31:28
5450
原创 ioctl(sock, SIOCGIFHWADDR, &ifr)获取网卡mac地址
ioctl(sock, SIOCGIFHWADDR, &ifr)获取网卡mac地址ioctl(sock, SIOCGIFINDEX, &ifr)获取网卡接口地址为什么我bind时只需要接口地址而不需要mac地址呢?猜测:是不是mac地址bind也可以,接口地址也可以,两者取一即可,只不过接口地址比较方便。网卡接口索引唯一标记本机上的一块网卡,所以依据此索引,可以定位到本机上指定的一
2015-04-27 15:30:49
21851
4
转载 send() 和recv()
send() 和recv() 系统调用send()的用法如下:int send(int sockfd, const void* msg, int len, int flags); 第一个参数是你希望给发送数据的套接口文件描述符。它可以是你通过socket()系统调用返回的,也可以是通过accept()系统调用得到的。第二个参数是指向你希望发送的数据的指针。第三个参数是数据的字节
2015-04-27 15:29:54
1457
转载 TCP/IP协议详解
1、TCP/IP协议栈四层模型 TCP/IP这个协议遵守一个四层的模型概念:应用层、传输层、互联层和网络接口层。 网络接口层 模型的基层是网络接口层。负责数据帧的发送和接收,帧是独立的网络信息传输单元。网络接口层将帧放在网上,或从网上把帧取下来。 互联层 互联协议将数据包封装成internet数据报,并运行必要的路由算法。 这里有四个互联协议: 网际
2015-04-27 15:29:12
829
原创 多接口使用同一套接词
当在多个网络接口的主机上使用这个套接字时,若要指定接收或发送的接口时可以使用bind进行绑定,这与TCP套接字的操作一样,但其内涵并不相同。绑定时将根据地址结构中的sll_protocal和sll_ifindex分别绑定收发的协议号和接口索引号,接口索引号sll_ifindex为0时表示使用有效的所有接口。接口的sll_ifindex值可以通过ioctl获得,如下面是获得名字为“eth0”的接口的
2015-04-27 15:27:58
537
转载 以太网,IP,TCP,UDP数据包分析
ISO开放系统有以下几层:7应用层6表示层5会话层4传输层3网络层2数据链路层1物理层2、TCP/IP 网络协议栈分为应用层(Application)、
2015-04-27 15:22:02
745
原创 TCP三次握手中SYN,ACK,Seq三者的关系
TCP(Transmission Control Protocol)传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgen
2015-04-27 15:20:36
61638
9
转载 wireshark基础
抓包软件的基础是为了让你知道网络通信当中客户端与服务器之间如何建立通信,通信建立后数据交换以及断开通信的详细过程而形成的。wireshark功能强大,能够抓到从底层到表层:物理层(Frame)的数据帧、数据链路层(Ethernet II)以太网帧头部信息、网络层(Internet Protocol Version 4)IP报头信息、传输层(Transmission Control Protocol
2015-04-27 15:16:52
584
转载 readline函数
在前面的文章中,我们为了避免粘包问题,实现了一个readn函数读取固定字节的数据。如果应用层协议的各字段长度固定,用readn来读是非常方便的。例如设计一种客户端上传文件的协议,规定前12字节表示文件名,超过12字节的文件名截断,不足12字节的文件名用'\0'补齐,从第13字节开始是文件内容,上传完所有文件内容后关闭连接,服务器可以先调用readn读12个字节,根据文件名创建文件,然后在一个循环中
2015-04-27 15:13:53
13870
转载 bind()函数 精辟解析
一旦你有一个套接字,你可能要将套接字和机器上的一定的端口关联 起来。(如果你想用listen()来侦听一定端口的数据,这是必要一步--MUD 告 诉你说用命令 "telnet x.y.z 6969"。)如果你只想用 connect(),那么这个步 骤没有必要。但是无论如何,请继续读下去。 这里是系统调用 bind() 的大概: #include ; #include ; int b
2015-04-27 15:13:02
554
原创 勉励自己
1.大家都读书的时候你也读书,大家学这个专业的时候你也学这个专业,就意味着你懂的东西大家都懂。要让别人看见自己的背影,一个方法是跟队伍跑同一个方向并且冲到最前面,还有一个方法是直接掉队,跑和大家不一样的方向。显然,后者的效果比前者更立竿见影。人毕竟都是有虚荣心的。知识面广的人往往比术业道行深的人更受欢迎,因[懂很多东西]很易见,[对一件事了解很深入]缺不易见。我也是这样的人。大学同学觉得我懂很
2015-04-27 15:11:52
355
转载 C书单
不是不想帮大家只是我还没有这个资格。我把自己看过的觉得比较好的一些数列一下希望能对大家有用。鉴于国内出版的书质量基本不高,所以希望大家最好看国外原版书。###数学#####我就不多说了,重要性不言而喻。学计算机的学的越多就越觉得自己是学数学的。微积分,概率论,线性代数,图论,逻辑代数,组合数学“Introductory Combinatorics”“Naive Set Th
2015-04-27 15:11:36
440
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人