つつみくんのLinux記

つつみくんのLinux記

PR

プロフィール

つつみくん

つつみくん

サイド自由欄

つつみくんのLinux記は、自宅のLinux「Fedora14」と、モバイルのLinux「Netwalker」と「Ubuntu10.10ノート」と「EeePC Ubuntu」で作っています!
リンク、トラックバックなども大歓迎です。(^^)♪
お買い物は↓コチラから

カレンダー

キーワードサーチ

▼キーワード検索

March 17, 2008
XML
カテゴリ: Linux記
Linuxを使っていて、一番安心できるところは、プログラムのソースがあるというところです。(^^)

ソースが公開されていることをオープンソースといいますが、このソースとはいったいどんなものでしょうか。

たとえば、画面に「Hello(^^)」と表示されるhelloコマンドがあるとします。

このソースコードを、見てみると、

#include <stdio.h>

int main(void)
{
printf("Hello(^^)\n");
return 0;
}

という感じになります。

一番最初の行の#include <stdio.h>というのは、通常の入出力命令が使えるようにするものです。

このプログラムでは、画面に文字を表示するprintfというコマンドを使っていますが、これを使うためにstdio.hをインクルードしているということになります。

そのほか、mainとreturnというものが使われていますが、これは、このプログラムが実行されると、mainの後の{}で囲まれた部分が実行されて、rerurnでプログラムが終了するということを表しています。

こうやって、人間の分かる文法で書かれたコードの事を、ソースコードと言います。



たとえば、上の「hello(^^)」を表示するソースコードをhello.cという名前で保存してみます。

そして、64bitのFedoraのコマンドラインから、

gcc -o hello hello.c

とすると、「hello」という実行ファイルが出来上がるのでした。

これを./helloとして実行すると、

hello.(^^)

というメッセージが画面に表示されるのですが、このhelloというファイルを、そのまま32bitのUbuntuノートにコピーして実行しても、

bash: ./hello: cannot execute binary file

というメッセージが出て、実行出来ません。(^^;)

ところが、hello.cの方をコピーして、Ubuntuでビルド(構築)してあげれば実行出来るファイルが作られるのでした。

ためしに、Ubuntuで、



とやってみましたが・・・stdio.hが無いというメッセージが出てきました。(><)

これは、ソースコードが間違っているのではなく、Ubuntuをインストールしても、C言語でビルドする環境が入らないのでした。(^^;)

気を取りなおして、

sudo apt-get install build-essential

Synaptic_build-essential .png
↑あるいは、Synapticパッケージマネージャから、build-essentialをインストールすると、

ビルドパッケージ.png


gcc -o hello hello.c

とすると、今度はきちんと実行ファイルが作られました。(^^)

という訳で、ソースコードさえあれば、それをいろんな環境でビルドすることで、CPUが32ビットか64ビットかということも関係なく、実行するファイルがいつでも作れるのでした。

しかも、Linux自体のソースコードがある訳ですから、多少手直しは必要かもしれませんが、64ビットでも、128ビットCPUでも、動かすことが出来るということになります。

ということで、私の紹介したプログラムは、簡単すぎて参考にならないかもしれませんが、これからプログラムを勉強したいという方や、C言語は知っているけど、最近全然プログラムを作っていないという方も、Linuxでプログラミングをしてみてはいかがでしょうか?

もしかすると、あなたの作ったプログラムが、後世に残るなんていうことがあるかもしれませんよ。(^^)

(つづく)





お気に入りの記事を「いいね!」で応援しよう

最終更新日  March 17, 2008 11:01:16 PM
コメント(14) | コメントを書く


■コメント

お名前
タイトル
メッセージ
画像認証
上の画像で表示されている数字を入力して下さい。


利用規約 に同意してコメントを
※コメントに関するよくある質問は、 こちら をご確認ください。


Re:つつみくんのLinux記その84(C言語でプログラミング)(03/17)  
maetar  さん
学生の頃から、こういった言語系は大の苦手でした。Fortranから始まり、アセンブラ、C言語とすべてにおいて落ちこぼれやったことを思い出しましたわ~(f^^)C言語なんかは何回か勉強しようと思って、書籍も買ったりしたことあったけど、すぐに挫折してしまうんですよね(^^;;; (March 18, 2008 12:23:04 AM)

結構すごいですね!!  
だいちゃん さん
apt-getって何やったっけ? っていう感じです。

最近、LPIC 201の勉強に凝ってるんで、LPIC 101の内容正直忘れています。

また、LPIC 101の本をやり直さないとw ネッ!!
(March 18, 2008 12:30:30 AM)

Re:つつみくんのLinux記その84(C言語でプログラミング)(03/17)  
星定規 さん
LinuxでのC言語ですか、懐かしいですね。
大学時代、プログラミング演習でUNIXで
C言語を使っていたことがあります。
C言語はすべての言語の基本ですからね。
自分御世代のほとんどの人はC言語を勉強
した後に、Javaなどに転向したひとが多い
です。
最近のスタンダードはJavaみたいですけどね。

以上。 (March 18, 2008 02:09:16 PM)

Re:つつみくんのLinux記その84(C言語でプログラミング)(03/17)  
HiLack さん
とても分かりやすくて素敵です^^
いつか自分も「sl」コマンドのように人のためにならないようなコードを残せたらいいなぁと思ってます。。 (March 18, 2008 08:04:48 PM)

Re[1]:つつみくんのLinux記その84(C言語でプログラミング)(03/17)  
つつみくん  さん
maetarさんこんばんは(^^)

>学生の頃から、こういった言語系は大の苦手でした。Fortranから始まり、アセンブラ、C言語とすべてにおいて落ちこぼれやったことを思い出しましたわ~(f^^)C言語なんかは何回か勉強しようと思って、書籍も買ったりしたことあったけど、すぐに挫折してしまうんですよね(^^;;;

二十数年前に私が初めてパソコンをさわったときは、BASICでプログラムを作らないと全く動きませんでしたから、必然的にというか、半ば強制的にプログラムを作るようになりました。(^^;)

私も、学生の時にFortranは挫折しました~(><)

アセンブラは、BASICでゲームを作ると、めちゃくちゃ遅かったので、ハンドアセンブルしていた記憶があります。(^^;)
(当時C言語のような高級言語は高くて買えませんでした。)

そういえば、C言語は会社に入った頃は使いましたが、今ではLinux以外でC言語は使わないですね。

言語?といえば、この記事を書いているときに、HTMLで「<」と「>」が表示できなくてあせりました・・・やっぱりちゃんと勉強しないとダメですね。(^^;;;) (March 18, 2008 11:42:25 PM)

Re:結構すごいですね!!(03/17)  
つつみくん  さん
だいちゃんさんこんばんは(^^)

>apt-getって何やったっけ? っていう感じです。

>最近、LPIC 201の勉強に凝ってるんで、LPIC 101の内容正直忘れています。

>また、LPIC 101の本をやり直さないとw ネッ!!

私も、dpkgが出てこなくて???状態でした。(^^;)

使ってないとすぐに忘れてしまうんですよね。

幸い、ブログに書いておいたので、自分の過去記事を見て勉強しなおしました。(^^;)

分からなくて、Googleで検索すると、自分のブログがヒットしたりしますからねぇ・・・そろそろ、同じことを何回も書いてるかもしれません。(^^;) (March 18, 2008 11:51:37 PM)

Re[1]:つつみくんのLinux記その84(C言語でプログラミング)(03/17)  
つつみくん  さん
星定規さんこんばんは(^^)

>LinuxでのC言語ですか、懐かしいですね。
>大学時代、プログラミング演習でUNIXで
>C言語を使っていたことがあります。
>C言語はすべての言語の基本ですからね。
>自分御世代のほとんどの人はC言語を勉強
>した後に、Javaなどに転向したひとが多い
>です。
>最近のスタンダードはJavaみたいですけどね。

>以上。

私も、最初にC言語を勉強した時はUNIXでした。(^^)

当時はUNIXってすごいと思いましたが、今ではLinuxがあるので、便利な時代になりました。

Javaは仕事で使っていたので、あまり家に帰ってからは使っていませんでしたが、そろそろ家でも使いたくなってきました。(^^;)

Javaはサーバー系で使っても面白いですからねぇ・・・久々にTomcatあたりを入れてみようと思います。(^^) (March 19, 2008 12:09:59 AM)

Re[1]:つつみくんのLinux記その84(C言語でプログラミング)(03/17)  
つつみくん  さん
HiLackさんこんばんは(^^)

>とても分かりやすくて素敵です^^

ありがとうございます。(^^)

>いつか自分も「sl」コマンドのように人のためにならないようなコードを残せたらいいなぁと思ってます。。

slコマンドは面白いですね・・・さっそく入れてみました。(^^)

ただ、いまの環境だと。4秒くらいで走り去ってしまうのが残念ですね。(^^;)

これがデフォルトで入っているディストリビューションがあったら面白いんですけどねぇ・・・(^^;) (March 19, 2008 12:13:41 AM)

久々に・・・  
カトミノ  さん
Cのプログラムを作りました。
#include <stdio.h>

int main(int argc, char** argv) {
printf("Hello, (^^)/\n");

return 0;
}

つつみくんのとは、main関数の定義がちょっと違います。
実は、私がC言語を勉強したときはK&Rだったので、main関数を
void main()
と書いてました。
その後、何かの本でANSI(アンシー?アンジー?)では、上記のような書き方が正しいと書いてあったので、
それ以来、int main(int argc, char** argv)と書いてます。
その後、真相を究明することなくJavaに引っ越しました。

最近は、RubyやPHPなどのスクリプト言語しか使ってないので、C言語でmalloc&freeなんて恐ろしくて使えません!(>_<;)
(March 19, 2008 12:39:26 AM)

Re:久々に・・・(03/17)  
つつみくん  さん
カトミノさんおはようございます。(^^)

>つつみくんのとは、main関数の定義がちょっと違います。
>実は、私がC言語を勉強したときはK&Rだったので、main関数を
>void main()
>と書いてました。
>その後、何かの本でANSI(アンシー?アンジー?)では、上記のような書き方が正しいと書いてあったので、
>それ以来、int main(int argc, char** argv)と書いてます。
>その後、真相を究明することなくJavaに引っ越しました。

私も、main関数に引数を渡すときはint main(int argc,char **argv)にしますよ。(^^)

今回は、コマンドラインから何も受け取らない簡単なプログラムなので、voidにしてみました。(^^;)

たしかに、昔はvoid main()と教えられたことがあります・・・Linuxでは、正常終了の0と異常終了の0以外をシェルで判定することがあるので、intにしておかないとwarningが出ますね。(^^;)

>最近は、RubyやPHPなどのスクリプト言語しか使ってないので、C言語でmalloc&freeなんて恐ろしくて使えません!(>_<;)

私もC言語でプログラムするより、シェルスクリプトを作る方が多いですね。(^^;)

ユーザーインターフェイス部分はC言語を使うより、スクリプト言語を使った方が、安全ですからねぇ。(^^)

とはいえ、バイナリファイルなんかを扱うときは、C言語の方が使い易いので、一長一短かもしれません。(C言語で書くと、数行で済むことがありますから・・・)

mallocやfreeもなつかしいですね・・・今はメモリがたくさん使えるので、ほとんど使わなくなってしまいましたが・・・(^^;)

自分が作ったプログラムが攻撃されることは、まず無いと思いますが、バッファオーバーフローは怖いですね。(^^;) (March 19, 2008 08:32:50 AM)

Re:つつみくんのLinux記その84(C言語でプログラミング)(03/17)  
春の棒  さん
 Linuxはプログラミングにはいいです(笑)。

 私の場合は、擬似言語でアルゴリズムを組み立ててからコーティングします。
 ちょっと大げさかもしれませんが、ダラダラプログラムはやっぱり、見た目嫌ですので(苦笑)。

ところで・・・
 「つつみくん」さんにとって、プログラムはストレスが溜まるのでしょうか。
 以前の記事に、C言語でプログラムを組んでまで・・・。
 と書いてあった様な気がしたので(礼)。 (March 19, 2008 05:36:43 PM)

Re[1]:つつみくんのLinux記その84(C言語でプログラミング)(03/17)  
つつみくん  さん
春の棒さんこんばんは(^^)

> Linuxはプログラミングにはいいです(笑)。

そうですね、いろんなプログラム環境が簡単に手に入りますからねぇ。(^^)

> 私の場合は、擬似言語でアルゴリズムを組み立ててからコーティングします。
> ちょっと大げさかもしれませんが、ダラダラプログラムはやっぱり、見た目嫌ですので(苦笑)。

私の場合は、まず、いきなり作り始めます。(^^;)

作りながら2~3手先まで読めば、自然と構造化できてしまうので・・・将棋みたいですが・・・昔からそうしているので、慣れちゃってます。(^^;)

>ところで・・・
> 「つつみくん」さんにとって、プログラムはストレスが溜まるのでしょうか。
> 以前の記事に、C言語でプログラムを組んでまで・・・。
> と書いてあった様な気がしたので(礼)。

プログラムを作ることにはストレスが無いのですが、家でプログラムを作る時間を作るのが大変ですね。(^^;)

シェルスクリプトくらいなら、すぐ出来るので良いのですが、Cのプログラムはキチンと作らないと、見事に動きませんからねぇ(^^;)

とはいえ、せっかくなので、少しくらいは作るようにしようかと思っています。(^^) (March 19, 2008 06:27:41 PM)

LinuxってOSの名前なんですよね。  
splwtr さん
パッケージマネージャって、そのOS(Linux)を取り巻くサービスの
一つであって、LinuxというOSに共通なことではないのでは?

未だにCかC++で開発してます。JAVAとかもいいですけど
OSの開発言語がJAVAなら、もっと面白いかもしれない。

昔はLinuxや*BSDで遊んでました。未に現役で動いてます。
FreeBSDの開発者がAppleに雇われて、Mac OSX ができたので
Macに移行してしまいました、マルチメディアなこともできるしgccでコンパイルも可能ですし、遊ぶにはいいマシンかもしれません。つーか、会社の仕事、趣味で?Linuxに移植する人も居れば、OSXに移植してる人もいる。Windows上で動くCygwinって
環境やSFUもありましたが、UNIX系にとっては不十分なサービスなんですよね。
Windowsに移植する人は、いつやってくるのだろう。

って、このレポ読みながら感じました。 (March 20, 2008 01:30:44 AM)

Re:LinuxってOSの名前なんですよね。(03/17)  
つつみくん  さん
splwtrさんおはようございます。(^^)

>パッケージマネージャって、そのOS(Linux)を取り巻くサービスの
>一つであって、LinuxというOSに共通なことではないのでは?

そうですね、純粋にLinuxというOSはKernelの部分になると思いますが、rpm系やdeb系のパッケージもLinuxでいろんなソフトを動かすために生まれたものだと思うので、Linux関連として一緒に書くようにしています。(^^;)

>未だにCかC++で開発してます。JAVAとかもいいですけど
>OSの開発言語がJAVAなら、もっと面白いかもしれない。

JAVAで書かれたOSというのは私も考えたことがありました。

JAVAプラットフォームが動くOSをJAVAで作ってしまうというのは、かなり不思議な感じがしますが、gccもC言語で書かれていたりするので、あながちありえないことでは無いかもしれませんね。(^^)

>昔はLinuxや*BSDで遊んでました。未に現役で動いてます。
>FreeBSDの開発者がAppleに雇われて、Mac OSX ができたので
>Macに移行してしまいました、マルチメディアなこともできるしgccでコンパイルも可能ですし、遊ぶにはいいマシンかもしれません。つーか、会社の仕事、趣味で?Linuxに移植する人も居れば、OSXに移植してる人もいる。Windows上で動くCygwinって
>環境やSFUもありましたが、UNIX系にとっては不十分なサービスなんですよね。
>Windowsに移植する人は、いつやってくるのだろう。

>って、このレポ読みながら感じました。

OSXもいいプラットフォームですね。マルチメディア系が充実しているので、UNIX系OSの良いモデルになっている感じです。(^^)

CygwinやSFUは確かにちょっと微妙な感じがしますね・・・Windowsはこのまま独立路線で行っても良いような感じがします。(^^;)

書き込みありがとうございました。(^^) (March 20, 2008 10:13:40 AM)

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: