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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

OS

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

Q&A

3回答

1490閲覧

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

siaron

総合スコア8

C

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

OS

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

0グッド

0クリップ

投稿2018/05/21 15:19

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

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

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

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

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

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

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

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

投稿2018/05/21 15:54

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

siaron

2018/05/22 15:13

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

2018/05/22 16:08

ハードウェア命令というとちょっと違う気もしますね。 OSというお役所に決まった書式の申請書を提出し、OSはそれを基に実施計画作って実行するわけです。 OSの都合で却下される申請もありますし、申請書の結果どう作業しどのような結果になるかは OSが事前に提示しているマニュアルに決められた範囲ではありますが、不透明です。 入出力と表示の違いについては (ちょっと不思議な)タイプライターを思い浮かべるといいでしょう。 文字をキーボードで打ち込む(出力)と紙に文字が印刷(表示)されます。 この時、キーボードだけ外してパソコンのディスプレイに繋いでも 文字をキーボードで打ち込む(出力)するとデイスプレイに文字が"表示"されます。 キーボードからはどの文字を表示させるか選ぶ事はできますが フォントや、どの位置に表示させるか選ぶことはできません。 もしかしたら、カーソルキーに対応したディスプレイに繋ぐことである程度の位置を選ぶ事もできるかもしれません。 windowsの場合、出力先は基本的にコマンドプロンプトという例の黒い画面です。 (他のプログラムやファイルと繋がっている場合もあります) コマンドプロンプトは文字列を最低限表示できるだけの能力しかありません。 カーソルキーによる位置ずらしも文字幅分しか動かない。。。筈です よって、windows上で画像を表示しようとしたら WINAPIを用いて、 - 指定した大きさ・位置に窓をつくる - 窓にこの画像データを表示してもらう - 窓の管理 をする必要があります。
siaron

2018/05/24 18:39

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

0

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

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/21 18:22

testset

総合スコア221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

siaron

2018/05/22 14:55

お返事ありがとうございます わかりやすく書いて下さりありがとうございます プログラム中継役と言うか指示書や司令塔みたいな役割でしょうか OSはやりやすくというか、環境とか、制限すると言う事はセキュリティやら変な動きしないように見守る的なことかなと思います OS=制限があるから、なければ良くも悪くも自分で行えると でも、仮にOSと言う枠がない時に画像の表示はどうできるんでしょうか OSの役割はわかったとしてCで言語を作ったと言う話は、それはその指示や受け渡し的な部分だけで もしかして、ハードはハード側の人がそっち側で別に作った物てことですか ? 「この制限を突破するには、OSに機能を組み込んだり、ライブラリ・・・」と言う事ですけど両方しないといけないと言う事ですね?、まあ OS作ってる側じゃないしライブラリはそのためにあると思うのでライブラリを使うのはOS内では必須と言うのはわかりました アセンブリではできるっていうのはCがCPUだけ?を扱うだけだけど、アセンブリはハードの命令ってことですか?理解して使うってことですか コンパイルもいくつか投稿してる時に使いにくいなら使いやすく自分で作ればいいのかと思ったので興味は持ったので知っていこうと思います
testset

2018/05/24 17:32 編集

OSがない場合の画像表示ということですが、プログラム埋め込みの場合はVRAMに直接ビットマップを書き込むという方法になります。(事前に適切にハードウェアをリセット・クロックを設定し、エントリポイントへジャンプができている前提※での話です) なお、ここでいう画像というのはBITMAPまたはRGBへ変換が容易なものの想定です。 ちなみに、PNGの場合や、JPEGの場合はまずライブラリを使用しないとしんどすぎます(伸張処理やJPEGに至ってはカラープロファイル処理まであるので時間がいくらあっても足りません)。 ※ 初期化処理については、linuxの中身の話ですが、https://github.com/0xAX/linux-insides/blob/master/Booting/linux-bootstrap-1.md が良い粒度でまとまっているので、ヒントになるかとは思います(英語)
siaron

2018/05/24 18:39

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

0

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

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

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

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

投稿2018/05/28 02:35

a_saitoh

総合スコア702

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

siaron

2018/05/29 20:21

ありがとうございます ハードウェアが出来ることはできるのはわかりますが そのハードウェアを直接いじることはできないんでしょうか? ディスプレイしかり、パソコンもしかり、OSも結局そのハードウェアの命令?を使ってるんですもんね 後まだそこも知らないのにって言われるとは思いますが プロシージャやらありますがOSだけの概念ですか? 教えてほしいです、宜しくお願いします 結局その作り手によるってことですよね バージョンとか新しい技術云々以前の話ですね OSはOSだしハードウェアができるんだからわけがわかってないだけで 描けるのは当たり前ですよね 仕組み、OSを理解しろってことなんでしょうねOS上でやるには 当たり前のことなんですがOSって事を最初全く頭に入れてなかったです
a_saitoh

2018/06/01 02:22

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

2018/06/01 09:01

ある特定の順序で命令しないと期待した結果が得られない装置や逆に特定の順序で命令すると壊れる装置が存在しえます。 マルチタスクOSである以上自分勝手にハードウェアに触ることはできないですね > プロシージャ なんのことだか分かりませんが、コールバックプロシージャのことでしょうか? プロシージャ単体ですとC言語での関数とほぼ同じ概念です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問