質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • C

    3563questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • OS

    198questions

    OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

c言語で出来る事とOSとの関係とか何ならできるのか

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 474

siaron

score 2

変な事ばかり聞いてすいません
色々知りたいですが最初の内容から離れて来たので新しく投稿しました
もう少し知れれば整理が付きそうです

こんな感じで書いてあるのを見つけたので気になりました
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13177314378

OSと言う枠の中でやってるので言ってることはわかります
間違っていたら申し訳ないですがコンソールでも文字色を変えられるんですよね?
画像表示とかcでは向かないのですよね
でも同じパソコンの中で、コンソールも表示で白と黒とかあるわけで
どう違うと言うかなんでcでは出来ないのでしょうか

インタプリタのHSPで触った程度ですが
画像の構造体だかVRAMだか、直接いじるっていうやつで、RGBの数値でいじったことはあります
画像の表示命令はまた違った事なんでしょうか
画像の調べていたらバイナリで保存とかありました
色を数値で変えるくらいしかわかりません

OS違いといっても画像やらテキストって概念とか種類は共通規格みたないな感じで弄るにはVRAM的な事覚えてればいいのでしょうか?

細かい命令作るとなるとアセンブリまでいかないと出来ないものなのでしょうか

プログラムからほかのものを起動したりするのは何を使えばいいんでしょうか
場所やファイル名指定するのは当たり前なんですけど
こう言うのもOSの枠内だからOSのもの使うしかないというか
OSも作られたものだから言語で動かせるんだろうなと
わけわからないこと言ってますね汗

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+3

OSとOS上で動くソフトウェアは別の権限で動いています。
("脱獄"や"root化"しないと動かせないアプリがスマホにあるみたいな感じ
脱獄やroot化によって一時的にアプリを高い権限に昇格させています)

ソフトウェアは権限が必要な命令を実行したいときはOSに対して"お願い"して代わりにやってもらいます。
そのお願いのための様式がAPIと呼ばれるものです。

そして権限が必要な命令以外ですと計算くらいで、それを出力することも表示することもできません。
これでは不便なので、C言語は標準ライブラリというのを制定するときに
基本的な入出力・現在時刻の取得などを含んだ規格を作っており
それに沿ったライブラリを実装、標準として添付することで多くの環境でそれなりに使えるようになっています。

このときあくまで"入出力"であって、"表示"でないことに注意が必要です。
どう表示するかはライブラリ実装および環境(OS)次第です。
(ちなみにコンソールの文字色くらいならばANSIエスケープコードというものである程度弄れる事が多いです。)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/23 00:13

    権限ですか、そういえばWindowsでも管理者がとかあった気がします、それとは違うとは思います
    もう一方との話と合わせるとなんとなくこうかな?と思いましたが
    なんかOS在りきな気がしてきました
    そもそもOSを作るために作られたからOSに都合の合わせたことをするのは当たり前ですね
    聞く前の自分だと言語で入出力もすべて出来るもんだと思ってました
    知ってる人からしたら最初からそう言ってるでしょ、みたいな、そういうもんだろうと思うのかもですけど
    こういう事でいいんですよねWINAPIとか、ライブラリはハードウェア命令てことですよね、命令としてしか認識してしか考えてなかったので混乱してましたけど、ハードウェアを使う命令と言われたら納得できました
    まだ理解できてないのが入出力と表示の違いです
    文字も点とか、色も変えられるわけだから絵みたいなものだと思っていて例えば文字をずらして書いたら色を塗りつぶしたような状態になるので原始的な力業ですけど汗

    キャンセル

  • 2018/05/23 01:08

    ハードウェア命令というとちょっと違う気もしますね。
    OSというお役所に決まった書式の申請書を提出し、OSはそれを基に実施計画作って実行するわけです。
    OSの都合で却下される申請もありますし、申請書の結果どう作業しどのような結果になるかは
    OSが事前に提示しているマニュアルに決められた範囲ではありますが、不透明です。

    入出力と表示の違いについては
    (ちょっと不思議な)タイプライターを思い浮かべるといいでしょう。
    文字をキーボードで打ち込む(出力)と紙に文字が印刷(表示)されます。
    この時、キーボードだけ外してパソコンのディスプレイに繋いでも
    文字をキーボードで打ち込む(出力)するとデイスプレイに文字が"表示"されます。

    キーボードからはどの文字を表示させるか選ぶ事はできますが
    フォントや、どの位置に表示させるか選ぶことはできません。
    もしかしたら、カーソルキーに対応したディスプレイに繋ぐことである程度の位置を選ぶ事もできるかもしれません。

    windowsの場合、出力先は基本的にコマンドプロンプトという例の黒い画面です。
    (他のプログラムやファイルと繋がっている場合もあります)
    コマンドプロンプトは文字列を最低限表示できるだけの能力しかありません。
    カーソルキーによる位置ずらしも文字幅分しか動かない。。。筈です

    よって、windows上で画像を表示しようとしたら
    WINAPIを用いて、
    - 指定した大きさ・位置に窓をつくる
    - 窓にこの画像データを表示してもらう
    - 窓の管理
    をする必要があります。

    キャンセル

  • 2018/05/25 03:39

    何度もありがとうございます
    全く知識が足りないので
    全てを理解できていませんが
    ネットの記事を見ている間に端々ですがこれの事かな?くらいですが学んでます
    何度か書こうとしましたが関係なくなってしまったので短めに済ませます
    おかげで方向性だけは見えました
    自分の立ってる場所と目指す場所がわからないと不安なので質問ばかり先行してすいませんでした

    キャンセル

+2

 できることとできないこと

C言語を使って、
できないことは何かというと、「制御したいもの(ハードウェア)ができないこと」。
できることというのは、「制御したいもの(ハードウェア)ができること」です。
なお、上記のことはOSなし(アセンブラは有効としておいてください)での話です。

 できるようにするには

ハードウェアをそのまま制御してもよいと思いますが、
数あるハードウェア・通信規格等を1から作るのは時間がかかりすぎます。

そこで、OSを利用します。OSはハードウェアを動かすことができます。
たとえ、ハードウェアが異なっていてもOSが規定した動作をします。
「OSが規定した動作」というのが「OSの仕様」として存在します。
OSは環境を構築し、その上でアプリケーションを動かすことができるようにします。
アプリケーションはOSの用意した環境(≒OSの仕様の上)で動くことができます。

動かすことができるようにしているのはOSが特定のメモリ上に処理を配置したりと、
手助けしてくれています。(一言で書いていますが、膨大な処理を行ってくれています)

アプリケーションはOSの仕様に沿って作れば、そのOS上で動くことができます。
OSが異なったりしたときに、プログラムする内容が違っていたら、大変です。(時間がかかりすぎます)
そのため、ライブラリまたはプログラミング言語が共通の仕様を定めて、
どのOSでも似たような動きになるようなものを用意してくれます。(libc等)
もちろん、OSに特化した機能も呼ぶことをできるようにしています。

 補足:できないことが増えた

できるようにしたはずが、できないことが増えてしまうのは、仕様を作ったから、増えるのは当然。
OSの仕様やライブラリの仕様によりできることが制限されます。

この制限を突破するには、OSに機能を組み込んだり、ライブラリを作ったりする必要があります。
※OSに機能を組み込むのが、ドライバです。
なお、ハードウェアでできないことは、ハードウェアを増やすしか方法はありません。

 本回答における用語

言語

ここでいう言語というのはプログラミング言語のことで、機械が解釈できるようにするための言語です。
C言語に至っては、特定のプラットフォーム(CPU)及びライブラリで解釈できるように人が思うように記述できるようにしたものです。(詳しくはコンパイラについて知ってみると良いかもしれません)

ハードウェア
キーボードやマウス、CPU、メモリ、バス、BIOS等

OS
タスク・メモリ管理からハードウェア制御のドライバを含めた統合環境のこと。
OSのカバー範囲は広く、ハードウェア制御から、ソフトウェアの独立化まで多岐にわたります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/22 23:55

    お返事ありがとうございます
    わかりやすく書いて下さりありがとうございます
    プログラム中継役と言うか指示書や司令塔みたいな役割でしょうか
    OSはやりやすくというか、環境とか、制限すると言う事はセキュリティやら変な動きしないように見守る的なことかなと思います
    OS=制限があるから、なければ良くも悪くも自分で行えると
    でも、仮にOSと言う枠がない時に画像の表示はどうできるんでしょうか
    OSの役割はわかったとしてCで言語を作ったと言う話は、それはその指示や受け渡し的な部分だけで
    もしかして、ハードはハード側の人がそっち側で別に作った物てことですか

    「この制限を突破するには、OSに機能を組み込んだり、ライブラリ・・・」と言う事ですけど両方しないといけないと言う事ですね?、まあ
    OS作ってる側じゃないしライブラリはそのためにあると思うのでライブラリを使うのはOS内では必須と言うのはわかりました
    アセンブリではできるっていうのはCがCPUだけ?を扱うだけだけど、アセンブリはハードの命令ってことですか?理解して使うってことですか
    コンパイルもいくつか投稿してる時に使いにくいなら使いやすく自分で作ればいいのかと思ったので興味は持ったので知っていこうと思います

    キャンセル

  • 2018/05/25 02:30 編集

    OSがない場合の画像表示ということですが、プログラム埋め込みの場合はVRAMに直接ビットマップを書き込むという方法になります。(事前に適切にハードウェアをリセット・クロックを設定し、エントリポイントへジャンプができている前提※での話です)
    なお、ここでいう画像というのはBITMAPまたはRGBへ変換が容易なものの想定です。
    ちなみに、PNGの場合や、JPEGの場合はまずライブラリを使用しないとしんどすぎます(伸張処理やJPEGに至ってはカラープロファイル処理まであるので時間がいくらあっても足りません)。

    ※ 初期化処理については、linuxの中身の話ですが、https://github.com/0xAX/linux-insides/blob/master/Booting/linux-bootstrap-1.md が良い粒度でまとまっているので、ヒントになるかとは思います(英語)

    キャンセル

  • 2018/05/25 03:39

    ありがとうございます
    容易なもの、そうですね、まだ中身を理解するには早いですね
    リンクありがとうございます
    参考にさせてもらいます

    キャンセル

+1

OSのある環境ではユーザプロセスにできることは限定されています。通常のコンソールアプリはVRAMにアクセスして表示しているわけではありません(やろうと思えばできますが、通常の権限では許されないことが多いでしょう)。

ユーザプロセスに許されたことの範囲でやりたい処理をプログラム言語で実装できるか?という観点ではCはほぼすべてのことができます。が原理的にできるだけで現実的には面倒でやってられないってのは多々あります。

たとえばコンソールの色は以下のような段階に分かれます。
・ハードウェアにどのような色選択の手段があるか?
・OSがコンソールの色指定の手段を用意しているか?
・cmd.exeがコンソールの色指定を受け付けてOSに渡すようにできているか?
・ユーザプロセスがOSにcmd.exeに色指定依頼を出すAPIは用意されているか(現実には出力する文字にエスケープシーケンスを混ぜることでできる)
・その出力をC言語で作れるか

モノクロディスプレイに色指定が来ると白か黒かのどれかに置き換えて表示、ってのはOSかcmd.comが担当してるのだとおもいます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/30 05:21

    ありがとうございます
    ハードウェアが出来ることはできるのはわかりますが
    そのハードウェアを直接いじることはできないんでしょうか?
    ディスプレイしかり、パソコンもしかり、OSも結局そのハードウェアの命令?を使ってるんですもんね
    後まだそこも知らないのにって言われるとは思いますが
    プロシージャやらありますがOSだけの概念ですか?
    教えてほしいです、宜しくお願いします

    結局その作り手によるってことですよね
    バージョンとか新しい技術云々以前の話ですね
    OSはOSだしハードウェアができるんだからわけがわかってないだけで
    描けるのは当たり前ですよね
    仕組み、OSを理解しろってことなんでしょうねOS上でやるには
    当たり前のことなんですがOSって事を最初全く頭に入れてなかったです

    キャンセル

  • 2018/06/01 11:22

    多くのOSはユーザープログラムがハードウェアを触ることを禁止しています(CP/Mとか保護機構のないCPU用のOSだと触り放題)。
    なので、ハードウエアはOSが用意したAPI経由でOSに操作代行を依頼することしかできません。ごく一部のハードウェア機能はOSが許可すれば使えますが、全面的に使うならデバイスドライバーなどOS側のプログラミングが必要です。

    キャンセル

  • 2018/06/01 18:01

    ある特定の順序で命令しないと期待した結果が得られない装置や逆に特定の順序で命令すると壊れる装置が存在しえます。
    マルチタスクOSである以上自分勝手にハードウェアに触ることはできないですね

    > プロシージャ
    なんのことだか分かりませんが、コールバックプロシージャのことでしょうか?
    プロシージャ単体ですとC言語での関数とほぼ同じ概念です。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C

    3563questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • OS

    198questions

    OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。