本文主要是介绍【揭秘】linus当年创立linux的过程-0x1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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的过程-0x1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!