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

2024-01-02 23:08

本文主要是介绍【揭秘】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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/563914

相关文章

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主