【揭秘】linus当年创立linux的过程

1991年12月2日, 2:35:16

这个是时间;下面的是fdisk的程序,linus亲自写的,很有纪念意义;

很容易看懂。并不是一个全功能的fdisk程序。

主要功能是把硬盘的信息打印出来,包括设备 多少个块 是否是启动分区 分区的类型。

#include <unistd.h>

#include <stdio.h>#include <string.h>#include <fcntl.h>#include <linux/hdreg.h>#define DISK_STRING "/dev/hd"char * disk_type(unsigned char type){ switch (type) { case 1: return "12-bit DOS"; case 4: return "16-bit DOS (<32M)"; case 5: return "extended partition (don’t use)"; case 6: return "16-bit DOS (>=32M)"; case 0x81: return "minix"; } return NULL;}void fdisk(int disk_nr, int minor){ char name[100], * type; char buffer[1024]; struct partition * p; int fd; int i; sprintf(name,"%s%d",DISK_STRING,minor); if ((fd=open(name,O_RDONLY)) < 0) { fprintf(stderr,"Unable to open %s\n",name); exit(1); } if (1024 != read(fd,buffer,1024)) return; p = (struct partition *) (buffer + 0x1be); for (i=0 ; i<4 ; p++,i++) { if (!p->nr_sects) continue; printf("%s%d: %6d blocks",DISK_STRING,minor+1+i,p->nr_sects>>1); if (p->boot_ind == 0x80) printf(" active"); else if (p->boot_ind) printf(" active? (%02x) ",p->boot_ind); if (type = disk_type(p->sys_ind)) printf(" %s\n",type); else printf(" unknown partition type 0x%02X\n",p->sys_ind); }} int main(int argc, char ** argv){ fdisk(1,0); fdisk(2,5); return 0;

}

fdisk程序应该包括查看有哪些分区(包括分区类型,大小,是否是活动分区),增加一个分区,删除一个分区。

这里linus只是实现了一个查看的功能,很有用的。

虽然只是功能的三分之一,现在的我们如果看这个程序,80%的能看完,当然不一定能看懂。

如果增加2倍的代码,估计只有20%的人愿意看,也只有10%的人能看懂。

现在的学生,你给他一个只是实现查看分区的任务的代码,能找到怎么实现的也就10%,而又能找到相关代码并且模仿实现的也就5%。

因为我们现阶段的教材里面没有教你怎么查看分区的信息。!是多么的可悲。

没有别的意思,亲自写写代码,看看代码,模仿的写写代码。是多么的有用。

我把里面关键的两个地方加红,就是普通的open()函数和read()函数!

91年的linus,赶紧收藏!

看着书里九万五千公里的绚丽。又或是和我一样,

【揭秘】linus当年创立linux的过程

相关文章:

你感兴趣的文章:

标签云: