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

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

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

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

918閲覧

Linux:/procファイル情報の読込み・表示

kanetugu_70e

総合スコア100

C

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/12/21 17:44

編集2018/12/22 07:21

前提・実現したいこと

Linuxカーネルの勉強を始めましたが、開始早々に躓き途方に暮れております。
基礎的な質問であり大変恐縮ですがご教授願います。

[目的]
C言語を使用してLinuxのバージョン情報をコンソールに表示する。
(Linuxコマンド"$cat /proc/version"等と同様の結果が得られるようにする)
他にも、CPUの型およびモデル、システム起動からの経過時間も同じようにCプログラムを介して表示させる。

発生している問題

実行すると以下2,3行目のように豆腐表示となります。
4行目以降が、catコマンドで実行した場合です。

イメージ説明

該当のソースコード

C言語

1#include<stdio.h> 2#include<stdlib.h> 3 4int main(){ 5 FILE *infile; 6 int ver; 7 8 infile=fopen("/proc/version","r"); 9 while(ver=fgetc(infile)!=EOF){ 10 printf("%c",ver); 11 } 12 printf("\n"); 13 fclose(infile); 14 return(0); 15 16}

試したこと

文字コードが原因と思い、ソースコード側及び元ファイル(バージョン情報)側共にutf-8へ変換したが、
改善が見られませんでした。
変換は、viエディタの":set fenc=文字コード"で行っています。

別途バージョン情報を書いたテキストファイルを生成し、これを読み込んでみましたが結果は同様でした。

補足情報

・gcc ver.7.3.0

[解決後メモ]
・変数初期化大事
・関数複数試す
・優先度の再確認
・そもそも文字コードが原因であれば出力文字が全て同じになる事は無い??
・gcc -Wallオプションの使用
→全ての警告オプション有効

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

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

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

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

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

otn

2018/12/22 05:44

> [解決後メモ] あと、gcc -Wall ~~ とか。
kanetugu_70e

2018/12/22 07:18

>otn様 初めて知りました。これから重宝しそうです。 ありがとうございます。
guest

回答2

0

ベストアンサー

つwhile ((ver = fgetc(infile)) != EOF) {

投稿2018/12/21 18:59

hichon

総合スコア5737

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

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

kanetugu_70e

2018/12/22 03:04

何ともお恥ずかしいミスでした。ご指摘頂きありがとうございます。 今すぐに試す事が出来ないですが、後日ご指摘頂いた通り実行したいと思います。
guest

0

fgets関数ではどーでしょう

投稿2018/12/21 22:34

y_waiwai

総合スコア87774

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

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

kanetugu_70e

2018/12/22 03:09

ご回答頂きありがとうございます。 先の回答者様ご指摘の通り、演算子優先度が原因でした。 fgetsも試していれば気付けたかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問