情報科学実験ガイダンス

Similar documents
slide5.pptx

chapter 3 chapter 単純な HTTP クライアント / サーバ 61 HTTP クライアントの実装 62 HTTP サーバの実装 Chapter2 のまとめ 67 UDP 3-1 UDP の特徴とプログラミング UDP のプログラミング 71

スライド 1

gengo1-12

練習 4 ディレクトリにあるファイルを直接指定する (cat) cat コマンドを使う (% cat ファイル名 ) と ファイルの内容を表示できた ファイル名のところにパス名を使い ディレクトリ名 / ファイル名 のように指定すると ディレクトリ内にあるファイルを直接指定できる 1 % cat _

memo

gengo1-12

2006年10月5日(木)実施

2-4- 応 Linux のシステムプログラミングに関する知識 Linux をインストールしたマシン上で 多くの動作するプログラム例を コンパイル 実行して システムプログラムを作成する 最終的には Ⅰ. 概要 DBM 割り込み処理 子プロセスを作成して親プロセスとプロセス間 Ⅱ. 対象専門分野職種

PowerPoint プレゼンテーション

TFTP serverの実装

01-introduction.ppt

Prog1_12th

slide4.pptx

プレポスト【解説】

Microsoft Word - Training10_プリプロセッサ.docx

gengo1-12

double float

演算増幅器

第 3 回情報基礎演習 UNIX / Linux: ファイルシステム シェルを理解しよう! 谷口貴志 Panda に login し 情報基礎演習クラスの VDI から Ubuntu に接続し Linux に login した後, 左 上の Activity 端末のアイオン をクリック 端末 を立ち

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C

情報処理概論(第二日目)

Microsoft PowerPoint - 第3回目.ppt [互換モード]

全体ロードマップ インターネット電話 音の符号化 ( 信号処理 ) 今日 音の録音 再生 ネットワーク ( ソケット ) プログラミング ファイル入出力 インターネットの基礎 C プログラミング基礎

memo

ファイル入出力

ファイル入出力

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

273? C

Microsoft PowerPoint - kougi2.ppt

Microsoft PowerPoint - InfPro_I6.pptx

レベルアップ詳細情報 < 製品一覧 > 製品名 バージョン < 追加機能一覧 > 管理番号 内容 説明書参照章 カナ文字拡張対応 < 改善一覧 > 管理番号 内容 対象バージョン 説明書参照章 文字列のコピー ペースト改善 ~ 子画面の表示方式 ~ 履歴の詳細情報 ~ タブの ボタン ~ 接続時の管

講習No.12

C言語入門

3.Cygwin で日本語を使いたい Cygwin で以下のコマンドを実行すると それ以降 メッセージが日本語になります export LANG=ja_JP.UTF-8 これは 文字コードを日本語の UTF-8 に設定することを意味しています UTF-8 は Cygwin で標準の文字コードで, 多

通信プログラムの試作ーーー UDP を用いたじゃんけんゲームシステム ーーーー裘彬濱 南山大学情報理工学部 ソフトウェア工学科青山研究室

プログラミング演習3 - Cプログラミング -

二次元連続動的計画法による知的画像処理システム ImageFileSelector RTC 機能仕様書 ImageFileSelectorRTC Ver.1.0 ( 株 ) 東日本計算センター 1 / 11

Taro-cshプログラミングの応用.jt

Microsoft PowerPoint - スハ?コン利用入門_ _UNIX利用の基礎知識.pptx

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

02: 変数と標準入出力

PowerPoint プレゼンテーション

1 ログインとログアウト 1.1 ログイン ログイン画面で [ password ] 欄にパスワードを入力します (図 1) 図 1 ログイン画面 正しくログインができると Ubuntu のデスクトップ画面 図2 が表示されます 図2 Ubuntu デスクトップ画面 2

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

プログラミング演習3 - Cプログラミング -

Microsoft PowerPoint - CproNt02.ppt [互換モード]

演算増幅器

今ならきっともっとよく分かる, 問題追求 ( デバッグ ) の仕方

04-process_thread_2.ppt

02: 変数と標準入出力

1) // 2) I/O 3) Japan Advanced Institute of Science and Technology 2013/07/26 1

情報処理概論(第二日目)

02: 変数と標準入出力

8 / 0 1 i++ i 1 i-- i C !!! C 2

untitled

第1回 ネットワークとは

PowerPoint プレゼンテーション - 物理学情報処理演習

第 4 章ファイル共有 NFS の構成 NFS(Network File System) は ネットワーク上でファイル共有を提供する仕組みです 主に Linux-Linux 間や Linux-UNIX 間で使用されます NFS サーバーが公開 ( エクスポート ) したディレクトリを N

プログラミング基礎

実験 6 通信基礎実験 1 目的 ネットワークを通じてデータ転送を行うことを体験的に学ぶために 本実験ではT CP/IPプロトコルを使い ワークステーション間で通信を行うクライアントサーバモデルのプログラムを作成する 2 解説 1 ネットワークとプロトコルネットワーク ( コンピュータネットワーク

3. 標準入出力

Microsoft PowerPoint - prog06.ppt

 

UNIX とは? 1969 年 米国のベル研究所で開発されたオペレーティングシステム特徴 文字ベースの対話型 OS マルチユーザ 複数のユーザが同時に利用できる マルチタスク マルチプロセス 複数の処理を平行して行える タイムシェアリング 一定の時間に区切って処理を行う 複数の処理を平行しているよう

rndc BIND

Microsoft Word - SE第15回.doc

C C UNIX C ( ) 4 1 HTML 1

Microsoft Word - IPC-intro.docx

Red Hat Enterprise Linuxのcron(8)デーモンにデフォルト定義されたtmpwatch命令の動作による、WebOTXのトラブル対処方法

PowerPoint プレゼンテーション

Microsoft Word - Lab5d-DB2組み込みSQL.doc

C 言語固有の命令で全部で32 個 の関数C 言語第 1 回 C 言語って?( シラバス 1 2 回目 ) 関数型言語 コンピュータに実行してもらう命令はすべて関数の中に記述されている 関数がプロ グラム

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

デバッグの工夫

02: 変数と標準入出力

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組

Troubleshooting SSH connections with Reflection X

Linux サーバー構築 LINUX サーバー構築目次... 1 第 1 章 LINUX のインストール... 6 第 1 節 CentOS とは... 6 第 1 項 CentOS とは... 6 第 2 節 CentOS インストールの準備... 6 第 1 項 iso ファイルの入手... 6

要求受付機能 管理番号内容対象バージョン 314 トレースログに重複してメッセージが出力される場合がある 6.3.2~ 大量のファイルトリガ情報が登録されている状態でファイルトリガプロセスを起動するとファイルトリガプロセスが停止する場合がある 7.2.0~7.3.1 ユーティリティ

Prog1_6th

BCSH7211 開発セット 添付 CD の使い方 第 1 版 CD 構成 1-1 インストゥール 1-2 GNUSH7211 ホルダ 1-3 BRE ホルダ 1-4 コンパイル 1-5 GCC オプションの意味 2.BCSH7211 CPU ボード用 サンプルプログラム 入

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

スライド 1

slide6.pptx

PowerPoint プレゼンテーション - 物理学情報処理演習

< 障害一覧 > HULFT 配信機能 管理番号 内容 対象バージョン 39 コード変換の必要がない集信処理および配信処理を実行したにも関わ 7.0.0~7.3.1 らず コード変換処理でエラーとなる場合がある 44 システム動作環境設定再設定コマンド (hulclusterxxx -set) を使

memo

24th Embarcadero Developer Camp

F コマンド

ネットワークシステム管理 #01

TCP_BP3591 の説明 V /03/28 ROHM 社製 WIFi モジュール BP3591 を使用して 無線 LAN により TCP/IP 通信を行うプログラムです 簡単な文字列によるコマンド ( 例 : LED0 ON ) を受信して LED の ON/OFF を行います 受

Microsoft Word - Cプログラミング演習(12)

CM-3G 周辺モジュール拡張技術文書 MS5607センサ(温度、気圧)

PowerPoint Presentation

情報処理概論(第二日目)

Taro-ファイル処理(公開版).jtd

Microsoft PowerPoint pptx

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

Transcription:

第 1 部ソケットプログラミング 情報科学科 峰野博史 1

警告は全て除去しましょう gcc Wall ansi O pedantic zzz.c o proxy Warning: Suggest parentheses around assignment used as truth value if ( Sock=accept(listenSock,.) == -1 ){ 演算順位のミスに注意! if ( (Sock=accept(listenSock,.)) == -1 ){ if ( Sock =! 0){ 演算子の記載ミスに注意 ( =! ではなく!= ) if( Sock!= 0 ){ 2

Linux コマンド ( 最低限 ) ディレクトリの中身を表示など $ ls la ディレクトリの中身を表示したい時 $ cd /etc/ ディレクトリの移動 $ pwd 現在いるディレクトリを表示 ファイルの中身を見る ( 終了する時はq) $ more xxxx $ less xxxx $ lv xxxx ファイル, ディレクトリ操作 $ cp aaa.txt target.txt ファイルのコピー $ rm test.exe ファイルの削除 $ mv target.txt xxx.txt ファイル名の変更 $ mkdir public_html ディレクトリの作成 $ rmdir public_html ディレクトリの削除 Linuxを終了, 再起動 # shutdown h now 終了 # reboot 再起動 3

Linux コマンドチートシート ( カンペ ) http://www.yotabanana.com/misc/fwunixref_ja.pdf 4

http://gigazine.net/news/20070926_linux_structure/ Linux ディレクトリ構造 青色 : ディレクトリ赤色 : ファイル黒色 : 説明 5

コンパイル時のオプション 警告はできるだけ除去しましょう gcc Wall ansi O pedantic zzz.c o proxy マルチスレッドプログラムなどの場合 gcc lpthread zzz.c o proxy 余談 ) コンパイラ ( アセンブラ ) について http://edu.inf.shizuoka.ac.jp/lecture/2012/sw1/ 6

シグナルハンドラについて singal.h を読み込む main() で signal(sigint, xxxxx); xxxxx 関数で適切な処理を記述 ソケットディスクリプタを close() する前に, きちんと相手にソケットディスクリプタを close() することを伝えておく! 相手からその旨を受け取ったら, こちらも相手とつないでいるソケットディスクリプタを正常終了させる ( そうしないと TCP の場合, 片方に口が残ったままで, 中のデータを取り出しきれない状況に ) 7

デバッグ方法について ソケットが正常に close できたか分からない とか エラー処理関数を使ったエラー処理 error.h エラー番号とエラーメッセージの対応関係が記載 strerror() を使ったエラー出力 if((fp = fopen( hoge.txt, r )) == NULL){ fprintf(stderr, File open: %s n, strerror(errno)); exit(1); } perror() を使ったエラー出力 if((fp = fopen("hoge.txt", "a")) == NULL){ perror("file open: "); exit(1); } 出力例 ) File open: No such file or directory システムコールが失敗した場合, 通常は返り値として -1 が返り, errno にエラーを識別する値が設定 多くのライブラリ関数も同様の動作で,perror() は, このエラーコードを可読なメッセージへ変換してくれる 8

#ifdef, #ifndef プリプロセッサ ( 通常は広義のコンパイラが兼ねる ) ソースプログラムをコンパイルする前に実施される前処理 ( プリプロセス ) を行うプログラム 例 1) デバッグ時の定石 #define DEBUG... #ifdef DEBUG printf( Debug: x=%d n, x); #endif 例 2) 重複定義エラーを防ぐ定石 #ifndef MyHeaderFile /* ヘッダーの最初 */ #define MyHeaderFile /* インクルードファイルの記述 */ #endif /* ヘッダーの最後 */ 9

Linux カーネルの構造 ( 概要 ) システムコールインタフェース Terminal 回線規律 キャラクタデバイスドライバ Linux オペレーティングシステム I/O コンポーネント 仮想ファイルシステム Socket ネットワークプロトコル ネットワークデバイスドライバ ファイルシステム ジェネリックブロック層 I/O スケジューラ ブロックデバイスドライバ メモリ管理コンポーネント 仮想メモリ ページングページ交換 ページキャッシュ プロセス管理コンポーネント シグナルハンドリング プロセス / スレッド作成, 終了 CPU スケシ ューリンク 割り込み / 切り替え処理 キーホ ート 等 NIC 等 HDD 等 メインメモリ CPU 10

exec() と fork() によるプロセスの変化 プロセス PID = X プログラム = A exec() プロセス PID = X プログラム = B 親プロセス PID = X プログラム = A 親プロセス PID = X プログラム = A fork() 子プロセス PID = Y プログラム = A (a)exec() の場合 (b)fork() の場合 11

http://itpro.nikkeibp.co.jp/article/column/20071031/285990/ ソケットディスクリプタのイメージ 通信用のファイルディスクリプタ ディスクリプタ : 単なる整数, プロセス毎に管理 糸電話の口 ( 紙コップ ) のようなもの クライアント サーバーと通信するソケット X 1listen(A) A 2X=connect() B 3B=accept(A) サーバー 接続待ちソケット クライアントと通信するソケット ^Cの時 close(x) サーバーからの切断要求時 close(x) クライアントからの切断要求時 close(b) ^Cの時 close(a) close(b) listen() で接続処理を受け入れ可能な最大数は SOMAXCONN で指定例 ) http://x68000.q-e-d.net/~68user/net/echo-3.html 12

戻り値を無視しないように! ライブラリ関数の戻り値 ( リターンステータス ) を無視すると, 関数が失敗したことや部分的にしか成功していないことを見逃す恐れがある 結果としてエラーを増殖させ, 問題の特定を困難に! 例 1) send() の戻り値は? -1: 失敗が発生した場合 (errno 変数で理解可能 ) n: 送信された文字数 例 2) read() の戻り値は? -1: 失敗が発生した場合 (errno 変数で理解可能 ) n: 送信された文字数 0: ストリームソケットの接続相手が正しく終了した場合 13

SO_REUSEADDR について bind() で, ポート番号をサーバに関連付け TIME_WAIT 状態のポートであっても bind() できるようにする setsockopt() で,SO_REUSEADDR を指定 頻繁にソケットを開いたり閉じたりするようなシステムでは, TCP を利用するより UDP を利用するほうがよい BSD 系と Linux 系実装の違い http://umezawa.dyndns.info/wordpress/?p=2609 仮想環境のエミュレーション方法も関係するかも 14

getopt() argc や argv は使いこなせるようになった? 引数の数, その内容 様々なオプションを指定するには? >./getoptex -x -y -z -f filename -n 1200 file1 file2 file3 #include <unistd.h> /* UNIX 標準関係 */ while((c=getopt(argc, argv, xyzf:n: ))!=-1){ switch (c ){ case x : fprintf(stdout, -x オプション n ); break; case y : fprintf(stdout, -x オプション n ); } 15

select() でよくある不具合 クライアント, サーバ, どちらかのプログラムで無限ループ (select() で止まってくれない ) ソケットディスクリプタからずっと読み込み続けてしまう... 反対側で, ソケットディスクリプタを shutdown() してしまってないですか? select() の引数は必ず毎回再設定が必要! FD_ZERO(), FD_SET(),..., timeout = xxx とか タイムアウトした時は,continue させよう if (select( )<=0) continue; 16

ソケット関係のデバッグ netstat で状態を確認 netstat -n ESTABLISHED を 1 秒おきに表示 netstat -anp 待ち受け状態のポートと対応プロセスを表示 など パケットをキャプチャして分析 tcpdump, wireshark など ( 第二部で利活用 ) 暗号化されていなければペイロード部分 ( アプリケーションのデータ部分 ) を覗き見れるので, 意図した文字列を送受信しているのか分析可能 など 17