問題タブ [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.
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 は OS の種類に依存しない必要があります。
ハードウェア上のマシンコード -> asm -> C -> より複雑な C -> UNIX
そして今、さまざまな OS (すべての種類の UNIX) にさまざまな stdio.h があり、コンパイラはすべて gcc です。
これを理解する方法は?
どうもありがとう、アルフレッド
c - CコードからのMinixシステムで実行中のプロセスの数
したがって、これは最初は単純に見えましたが、Googleとここをクロールした後、答えは私が最初に思ったほど単純ではないようです。
基本的に、私はオペレーティングシステムコースの実践の一部としてMINIXカーネルを編集しており、InformationServerのファンクションキーを押したときに実行中のプロセスの数を吐き出す小さな関数を追加する必要があります。他のすべてのものが機能するように機能を統合する方法を理解しましたが、私の人生では、システムで実行されている現在のプロセス数をCコードと変数に取得する方法を理解できません。プリントアウト。
最初に、SYS_NUMPROCSのような気の利いたSyscallか、値を返す何かがあると思いましたが、運がありませんでした。次に、システム( "ps -ax | wc -l")からファイルに出力をパイプしようとしましたが、ファイルは作成されませんでした。popen()を使用してみましたが、うまくいきませんでした。バッファに単純な「ls」を読み込んでも、コードを爆破してコードの実行を「ハング」させるだけなので、出力はありません。
だから今、私は本当に困惑しています、そしてこの時点で私はすべての明白なオプションを使い果たしたので、どんな助けも非常に素晴らしいでしょう。
私が今考えることができるのは、すべてのプロセスをカウントするループだけですが、最初にシステムのプロセスリストにアクセスする必要があり、ディレクトリとしての/ proc /について漠然とした話を聞いたことがありますが、私はそうしていません。それにアクセス/実行する方法、または最初にプロセスの数を取得するためにどのようにリンクするかについての手がかり。
スタックに感謝します(笑しゃれ)、みんな:)
また、私が試したもののどれも私に喜びを与えなかったので、私が化粧品の出力のための基本的な印刷以外に何も書いていなかったので、私は明示的にコードを含めませんでした:/
編集メモ:みんな、これはカーネル編集です-私はシステムCファイルの情報をprintfする関数を書いています。次に、カーネルを再コンパイルし、システムを再起動してテストします。これはUNIX(MINIX)カーネルであり、Linuxカーネルではなく、ユーザーモードプログラムでもありません。
popen()の私のコードは、あなたの何人かが要求したように、次のとおりです。
それは私が覚えているものから少しハッキングされたバージョンであり、それを非常にシンプルに保ち、私がやろうとしていたことを皆さんに示しています。ただし、基本的にsystem()呼び出しの出力を呼び出す以外に、これを行うためのより良い方法が必要です。
もう一度編集します。上記のコードはユーザープログラムからは完全に機能しますが、カーネル関数からは機能しません。誰かが理由を知っていますか?:/
c - 「inode番号」がわかっている場合のinode構造の取得方法
minix の API を読みましたが、まだ混乱しており、inode 番号だけで「実際の」inode 構造を取得できませんでした。
「stat」構造でしか「inode番号」を取得できませんでしたよね?しかし、その番号を取得した後、対応する inode 構造を取得する方法はありますか?
c - モノラル変換用の wave ファイルの読み込み (Minix 3)
Minix 3 (C) のプロジェクトに取り組み始めようとしています。
私の考えは、ある種の音楽プレーヤーを作成することです。ファイル (WAV) を読み込んで、それらをタイマー 2 に送信される周波数のストリームに変換できるようにしたいと考えています。ブロック内の実際の周波数を、タイマー 2 に送信されるシンプルなモノラル カーブに変換します。
wavヘッダーの読み方を読んで学びましたが、データチャンク内のデータの意味がどこにも見つかりません。どう解釈すればいいですか?
私の最初のアイデアは本物の音楽プレーヤーを作ることでしたが、私のクラスでは Minix 3 でサウンドボードを操作する方法を学びませんでした。
私の知る限り、Cはすでにサウンド(BASS)を管理するためのライブラリです。Minix 3 にインストールできますか?
最後に、これをすべて簡単にする方法はありますか?
syntax - Minixに不正な構文が含まれています
MinixのプロジェクトをC言語で開発していて、デバイスのドライバーを置くためのフォルダーがありますcore
。私はこのフォルダ内にmain.c
あるインクルードを実行しましたが、構文が正しくないというエラーが常に発生します。vbe.h
make
私は2つの方法を試しました:
#include "./core/vbe.h"
#include "core/vbe.h"
私はいつもエラーがあります!
誰か助けてもらえますか?
c - Minix3stdio.hはファイルを認識しません*f
私は何かを開発していMinix 3
ますが、ioファイルの処理に関しては問題が発生しました。コード内:
頭に浮かんだことはすべて試しましたが、理解できません。
/編集/私が言えることから、何かを含めるとき、構造体に関係のない関数を呼び出しれば、それはOKです。構造体ですか?
c++ - オペレーティングシステムの設計を学ぶためのMinixとLinux?
オペレーティングシステムの設計を学びたいです。その過程でMinixとGNU/Linuxのどちらに取り組むべきか疑問に思いましたか?私は本が好きなので、主に本をフォローしますが、ビデオリソース(おそらくビデオテープによる講義)も歓迎します。
私は正式にCとC#を研究しており、それらの中で中小規模のプログラムをプログラムすることができます。また、データ構造について非常に基本的な知識があります。
Minixルートを使用する場合、バージョン2(より単純な??)またはバージョン3に取り組む必要がありますか?
c - MINIX 内部フラグメンテーション 2
特定のディレクトリ内のすべてのファイルを再帰的にリストするソフトウェアをCで作成している最中で、内部の断片化を解決する必要があります。
私はこれを調査するのに長い時間を費やしましたが、ext2 の内部フラグメンテーションは最後のブロックでのみ発生することがわかりました。理論的には inode 番号から最初と最後のブロック アドレスを取得できるはずですが、方法がわかりません。
stat()
、fcntl()
およびあらゆる種類の方法を調べました。inode 番号から最後のブロック アドレスを取得するにはどうすればよいですか?
また、最後のブロックのアドレスを取得したら、そのブロックにどれだけの空き領域があるかをテストして、内部の断片化を確認できることもわかりました。
get_inode
とget_block
コマンドがあることは知っていますが、それ以外はわかりません!
c - Minix 内部フラグメンテーション
重複の可能性:
内部フラグメンテーション
私は最近、ディレクトリ内のすべてのファイルを再帰的にリストし、ファイル名、サイズ、およびパスを出力するプロジェクトに取り組んでいます。
ここで、内部断片化の量を出力に追加し、ディレクトリ内の内部断片化の割合を計算する必要があります。
私はこれを行うために取り組んできました。iノード番号が必要です(から取得しますstat()
)。次に、その inode 番号をたどり、inode をトラバースして最後のブロックを見つける必要があります。次に、このブロックにどれだけの未使用スペースがあるかを調べる必要があり、それによって内部の断片化が発生します。
髪を引きちぎる前にどうしても助けが必要です!
c - VTreeFS でマウントが正しくない場合にクリーン エラーを返す方法は?
一連の引数を使用して (マウント時にオプション -o を使用して) VTreeFSファイルシステムをマウントしようとするとき、ユーザーが事前定義された引数を正しく使用しない場合、完全に失敗するようにしたいと考えています。現在、ファイルシステムをマウントせずにメインが 0 を返すと、この厄介なエラー メッセージが表示されます。基本的に、引数が正しくない場合はファイルシステムをマウントしないでください。
現在の状況
mount -t filesystemtest -o testarguments なし /mnt/filesystemtest
引数が無効です
RS: サービス 'fs_00021' は初期化中に終了しました
ファイルシステムテスト 109710 0xab6e 0x65f1 0x618d 0x6203 0x98ba 0x1010
RS への要求が失敗しました: 不明なエラー (エラー 302)
マウント: /bin/sercie up /sbin/filesystemtest -label 'fs_00021'-args '' を実行できませんでした
マウント: /mnt/filesystemtest/ に何もマウントできません: 不明なエラー
好ましい状況
mount -t filesystemtest -o testarguments なし /mnt/filesystemtest
引数が無効です
基本的に、以下のように start_vtreefs を呼び出さない場合に、クリーンなエラー メッセージを返す方法を知りたくありません。以下の例は実際のコードではなく、実際には引数を使用していませんが、例として、このコードを常に失敗させる方法があるはずです。(そのために残念):