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

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

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

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

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



#include

#include
#include
#include

#include

#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()函数!

【揭秘】linus当年创立linux的过程-0x1_第1张图片


91年的linus,赶紧收藏!


你可能感兴趣的:(【揭秘】linus当年创立linux的过程-0x1)