text_0D0_c_programming_on_sage

2645 days ago by takepwave

Hiroshi TAKEMOTO (take@pwv.co.jp)

SageでCプログラミング

このタイトルに驚かれた方の多いと思いますが、Sageのノートブックは、 pythonをベースに作られており、pythonの機能を使うとLinux上の 機能をほとんど利用することができるのです。

Sageワークシートの実行可能なドキュメントの威力をご覧ください。

ユーティリティ関数

Cのプログラムや結果をワークシートに保存するために、以下のユーティリティ関数を作成します。

  • printFile: ワークシートのDATA内に保存されたファイルを表示します
  • execCmd: cmdで指定されたコマンドを実行し、その結果を表示します

# ユーティリティ関数 def printFile(name): fileName = DATA+name file = open(fileName) txt = file.read(); file.close() print txt def execCmd(cmd): result = os.popen("cd %s; %s"%(DATA, cmd)).read() print result 
       

Cプログラムの作成と編集

ワークシート上部のDataプルダウンメニューをクリックし、Upload or create fileを選択します

今回は新規作成ですので、2段目のenter the name of a new fileに作成するファイル名を入力します。

以下のような編集画面が表示されますので、これを使ってhello.cの内容を入力し、 Save Changesボタンを押して完了です。

# CのHello worldを作成 
       

プログラムの表示

作成されたプログラムをprintFile関数を使って表示します。

# プログラムを表示 printFile("hello.c") 
       
#include <stdio.h>

main()
{
    printf("Hello world!\n");
}
#include <stdio.h>

main()
{
    printf("Hello world!\n");
}

コンパイルの実行

プログラムが正しく入力されたことを確認できたら、以下のコマンドをexecCmd関数に渡して、 コンパイルを実行します。

	cc -o hello hello.c

# hello.cをコンパイル execCmd("cc -o hello hello.c") 
       

コマンドの実行

正常にコンパイルが終了したら、実行してみましょう。 helloのコマンドの前に./を入れているのはDATAディレクトリのhelloコマンドを実行するためです。

	./hello

# helloを実行 execCmd("./hello") 
       
Hello world!
Hello world!

Linuxコマンドも使えます

execCmdでは、他のLinuxコマンドも実行でき、|を使ってコマンドをパイプでつなぐことも可能です。

# 他のLinuxコマンドも実行できる execCmd("ls") 
       
hello
hello.c
hello
hello.c
# パイプも使えます execCmd("ls | wc") 
       
      2       2      14
      2       2      14