问题标签 [minix]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
777 浏览

c - 如何理解 stdio.h 在不同的操作系统上是不同的

首先,我说的是类 UNIX 系统。

我在 Mac OS、Linux、Minix 和 K&R C 书中查看了“FILE”结构的定义,它们都是不同的。

在K&R C书里,很清楚

在 Mac OS 上,它在结构中包含更多内容。

在 Linux (3.0) 上,它是

标题显示“在 C++ iostream 之上定义 ISO C stdio”。嗯……?(Linux上的C是由C++实现的?不应该相反吗?)看起来像_IO_FILE定义在libio.h

在 Minix 上,定义与 K&R 非常相似。

我的理解是 stdio.h 应该是 C 的一部分。第一个 C 编译器是由汇编语言实现的。并且 C 应该独立于操作系统类型。

硬件机器码 -> asm -> C -> 更复杂的 C -> UNIX

现在,不同的操作系统(各种UNIX)上有不同的stdio.h,编译器都是gcc。

这个怎么理解?

非常感谢,阿尔弗雷德

0 投票
8 回答
7677 浏览

c - 来自 C 代码的 Minix 系统上正在运行的进程数

所以,一开始这看起来很简单,但是在爬了谷歌和这里之后,答案似乎并没有我最初想的那么简单。

基本上,我正在编辑一个 MINIX 内核,作为我的操作系统课程实践的一部分,并且我必须添加一个小函数,当您在信息服务器中按下一个功能键时,它会吐出正在运行的进程的数量。我已经想出了如何集成功能,以便所有其他东西都能正常工作,但是对于我的生活,我无法弄清楚如何将系统中运行的当前进程数放入我的 C 代码和变量中以打印。

首先,我认为会有一个漂亮的系统调用,比如 SYS_NUMPROCS 或返回值的东西,但没有运气。然后,我尝试将系统(“ps -ax | wc -l”)的输出通过管道传输到文件,但文件不会创建。我尝试使用 popen() 也没有运气 - 即使将简单的“ls”读入缓冲区,它也只会轰炸代码并“挂起”代码的运行,因此没有输出。

所以现在我真的很难过,任何帮助都会非常棒,因为此时我已经用尽了所有明显的选择。

我现在唯一能想到的两件事是计算所有进程的循环,但首先你必须进入系统的进程列表,我听说过关于 /proc/ 作为目录的模糊说法,但我没有不知道如何访问/运行它,或者它如何链接到首先获取进程数。

谢谢一堆(笑双关语),伙计们:)

此外,我没有明确包含代码,因为除了基本的 printf'ing 用于化妆品输出之外,我没有写任何东西,因为我尝试过的所有东西都没有给我带来任何快乐:/

编辑说明: 伙计们,这是一个内核编辑——我正在编写函数来打印系统 C 文件中的信息,然后重新编译内核并重新启动系统进行测试。它是 UNIX (MINIX) 内核,不是 Linux 内核,也不是用户模式程序。

根据你们中的一些人的要求,我的 popen() 代码如下:

这有点像我记忆中的拼凑版本,它保持超简单,并向你们展示我正在尝试做的事情。不过,除了本质上调用 system() 调用的输出之外,还必须有更好的方法来做到这一点。

再次编辑:上面的代码完全可以从用户程序中运行,但不能从内核函数中运行。有人知道为什么吗?:/

0 投票
1 回答
1761 浏览

c - 知道“inode number”时如何获取inode结构

我阅读了 minix 的 API,但仍然感到困惑,并且无法仅使用 inode 编号获得“真正的”inode 结构

我们只能通过“stat”结构获得“inode number”,对吧?但是得到那个数字之后,有没有什么办法可以得到对应的inode结构呢?

0 投票
1 回答
199 浏览

c - 读取单声道转换的波形文件(Minix 3)

我即将开始为 Minix 3(C 语言)开发一个项目。

我的想法是创建某种音乐播放器。我希望能够读取文件 (WAV),然后将它们转换为发送到 Timer 2 的频率流。据我所知,没有简单的方法可以读取真正的音乐文件,我想接​​近块中的真实频率,发送到定时器 2 的简单单声道曲线。好的,问题:

  1. 我阅读并学习了如何读取 wav 标头,但是,我在任何地方都找不到数据块中数据的含义。我应该如何解释它?

  2. 我最初的想法是做一个真正的音乐播放器,但是,在我的课堂上,我们没有学习如何使用 Minix 3 中的音板。有一些教程,我可以学习吗?

  3. 据我所知,C 已经是一个管理声音(BASS)的库。可以以及如何在 Minix 3 中安装它?

  4. 最后,这是一种让这一切变得更简单的方法吗?

0 投票
1 回答
539 浏览

syntax - Minix 中包含错误的语法

我正在用 C 语言为 Minix 开发一个项目,我有一个文件夹来放置设备的驱动程序,称为core. 在main.c我做了一个包含vbe.h在这个文件夹中的那个并且make总是给我一个错误的语法错误。

我尝试了两种方法:

  • #include "./core/vbe.h"

  • #include "core/vbe.h"

我总是出错!

谁能帮我?

0 投票
1 回答
351 浏览

c - Minix 3 stdio.h 无法识别 FILE *f

我正在开发一些东西Minix 3,当涉及到处理 io 文件时,我遇到了问题。在代码中:

已经尝试了我想到的所有东西,无法弄清楚..

/编辑/据我所知,当我包含一些东西时,如果我调用与结构无关的函数,那没关系。是结构吗?

0 投票
5 回答
6878 浏览

c++ - Minix vs Linux 学习操作系统设计?

我想学习操作系统设计。我想知道我是否应该在此过程中处理 Minix 或 GNU/Linux?我喜欢书籍,所以我会主要关注一本书,但也欢迎视频资源(可能是录像讲座)。

我已经正式学习过 C 和 C#,并且可以在其中编写中小型程序。我对数据结构也有非常基本的了解。

如果我走 Minix 路线,我应该处理版本 2(更简单??)还是版本 3?

0 投票
2 回答
695 浏览

c - MINIX内部碎片2

我正在用 C 语言编写一些软件,它递归地列出给定目录中的所有文件,现在我需要解决内部碎片问题。

我花了很长时间研究这个,发现ext2上的内部碎片只发生在最后一个块中。我知道从理论上的 inode 编号你应该能够获得第一个和最后一个块地址,但我不知道如何。

我已经研究过stat()fcntl()以及各种方式。如何从 inode 号中获取最后一个块地址?

我还发现,一旦我有了最后一个块的地址,我就可以测试该块中有多少可用空间,这会给我内部碎片。

我知道有一个get_inode和一个get_block命令,但除此之外一无所知!

0 投票
0 回答
97 浏览

c - Minix 内部碎片

可能的重复:
内部碎片

我最近一直在做一个项目,以递归方式列出目录中的所有文件并输出文件名、大小和路径。

我现在需要将内部碎片的数量添加到输出中,然后计算出目录中内部碎片的百分比。

我已经努力做到这一点。我需要 inode 编号(我从中获得stat())。然后,我需要跟踪该 inode 编号并遍历 inode 以找到最后一个块。然后我需要计算出这个块中有多少未使用的空间,这会给我内部碎片。

在我撕掉头发之前迫切需要帮助!

0 投票
0 回答
251 浏览

c - 如何在使用 VTreeFS 错误挂载时返回干净错误?

当尝试使用一组参数挂载VTreeFS文件系统时(在挂载时使用选项 -o),如果用户没有正确使用预定义的参数,我们希望让它彻底失败。目前,当我们不挂载文件系统并让 main 返回 0 时,我们会收到这个讨厌的错误消息。如果参数不正确,我们基本上希望不挂载文件系统

当前情况

mount -t filesystemtest -o testarguments none /mnt/filesystemtest

参数无效

RS:服务“fs_00021”在初始化过程中退出

文件系统测试 109710 0xab6e 0x65f1 0x618d 0x6203 0x98ba 0x1010

对 RS 的请求失败:未知错误(错误 302)

mount: 无法运行 /bin/sercie up /sbin/filesystemtest -label 'fs_00021'-args ''

mount: 无法在 /mnt/filesystemtest/ 上挂载 none: 未知错误

首选情况

mount -t filesystemtest -o testarguments none /mnt/filesystemtest

参数无效

基本上,当不调用 start_vtreefs 时,我们不知道如何返回干净的错误消息,如下所示。下面的例子不是我们的实际代码,实际上并没有使用参数,但作为一个例子,应该有一种方法让这段代码总是失败。(对不起):