リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()

Slides:



Advertisements
Similar presentations
システムプログラミング 情報工学科 篠埜 功 情報工学科 3 年生対象 専門科目 第5回 シェルスクリプトの続 き レポート課題 main 関数の引数 usage メッセージ.
Advertisements

システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
2014年度 プログラミングⅡ ~ Cプログラミングやってみよう ~.
2015年度 プログラミングⅡ ~ Cプログラミングやってみよう ~.
応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
コマンドプロンプトの起動と終了 最初に覚えるコマンド ディレクトリ構造とパス 各種コマンドの練習 Cコンパイルとプログラムの実行
2013年度 プログラミングⅡ ~ Cプログラミングやってみよう ~.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第14章 ファイル操作 (コマンドプロンプト版)
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
第13回 プログラミングⅡ 第13回
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第6章 2重ループ&配列 2重ループと配列をやります.
情報処理Ⅱ 第13回 2006年1月20日(金).
アルゴリズムとデータ構造 補足資料6-3 「サンプルプログラムcat3.c」
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
ファイル操作と文字列の利用.
初年次セミナー 第2回 文字の出力.
情報処理Ⅱ 第13回 2004年01月25日(火).
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
プログラミング 2 ファイル処理.
プログラミング論 ファイル入出力
C言語講習 第0章 Hello, world!.
プログラミング応用 printfと変数.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
プログラミング演習I 2003年6月25日(第10回) 木村巌.
コマンドプロンプトの起動と終了 最初に覚えるコマンド ディレクトリ構造とパス 各種コマンドの練習 Cコンパイルとプログラムの実行
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
第14章 ファイル操作 (コマンドプロンプト版)
高度プログラミング演習 (02).
プログラミング論 ファイル入出力
プログラミング基礎a 第7回 C言語によるプログラミング入門 ファイル入出力
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
2013年度 プログラミングⅡ ~ はじめてのプログラミング ~.
プログラミング基礎B 文字列の扱い.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
2017年度 プログラミングⅡ ~ はじめてのプログラミング ~.
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
2014年度 プログラミングⅡ ~ はじめてのプログラミング ~.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
OSが管理している、デフォルトの入出力装置 入力:stdin キーボード 出力:stdout モニタ(コマンドプロンプトの画面)
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
UNIX演習 情報ネットワーク特論資料.
高度プログラミング演習 (01).
UNIX演習 情報ネットワーク特論資料.
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
プログラミング演習I 2003年7月2日(第11回) 木村巌.
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページを開いておく こと
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
プログラミング 4 文字列.
アルゴリズムとデータ構造 補足資料6-1 「サンプルプログラムcat1.c」
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
printf・scanf・変数・四則演算
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system() コマンドプロンプト操作(2) リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system() 今日のポイント リダイレクトとパイプを使いこなそう

リダイレクトとは 標準入力、標準出力、標準エラー出力 を "デフォルト"から別のファイルに割り当てる操作 標準入力、標準出力、標準エラー出力 を "デフォルト"から別のファイルに割り当てる操作 "デフォルト"は 「CON」 (コンソール) で、 実際の入力はキーボード、出力はディスプレイ 標準入力は 「 0< ファイル名」、「 < ファイル名」 標準出力は 「 1> ファイル名」、「 > ファイル名」 標準エラー出力は 「 2> ファイル名」 追加出力は 「>>ファイル名」、「2>>ファイル名」

リダイレクトの練習(1) Z:\nyumon2>dir > foo.txt Z:\nyumon2>dir /f 2> err.txt Z:\nyumon2>more < foo.txt Z:\nyumon2>more < err.txt err.txt に エラー出力 foo.txt の 内容を表示 foo.txt に 追加出力 Z:\nyumon2>dir /w >> foo.txt Z:\nyumon2>dir /v 2>> err.txt Z:\nyumon2>more < foo.txt Z:\nyumon2>more < err.txt err.txt に追加 エラー出力 foo.txt の 内容を再表示

リダイレクトの練習(2) Z:\nyumon2\hello>hello > hello.txt Z:\nyumon2>dir > con Z:\nyumon2>dir /f 2> con Z:\nyumon2>more < con > goo.txt abcdefghijklmnopqrstuvwxyz<Enter> Ctrl-z<Enter> Z:\nyumon2>more < goo.txt コンソールに出力 キーボード 入力を goo.txt に保存 ファイルの終わり を表す記号 (教科書p.139 問題14.3) 先週作った、Z:\nyumon2\hello に行き… Z:\nyumon2\hello>hello > hello.txt Z:\nyumon2\hello>more < hello.txt

パイプとは ファイル保存をせずに直接、次のプログラムにデータを受け渡す方法 縦棒「|」を使って連結する 標準入力、標準出力のコマンド、プログラムに用いる 並べ替えのコマンド Z:\nyumon1>dir /s /b | sort | more 標準入力/標準出力 標準出力 標準入力/標準出力

標準入力・標準出力のコマンド help コマンドで調べてみよう more: ページごとの出力 sort: 並べ替え find: 文字列検索 Z:\nyumon1>dir /s | find "hello" findstr: 高度な文字列検索 Z:\nyumon1>findstr /s "fopen" *.c help コマンドで調べてみよう

編集用コマンド notepad (メモ帳) write (ワードパッド) devenv (開発環境) Z:\nyumon2\hello>notepad hello.c write (ワードパッド) Z:\nyumon2\hello>write Z:\nyumon2\hello>write hello.c devenv (開発環境) Z:\nyumon2\hello>devenv hello.c 新規のとき

標準エラー出力を用いたプログラム hello.c を編集し、 hello2.c に名前を変えて保存 → CL コマンドを用いてコンパイル(cl hello2.c) /* hello world program 2 */ #include <stdio.h> int main(void) { printf("hello world!\n"); fprintf(stderr,"error message!\n"); return 0; } この行を追加 fprintf: ファイルへの出力(教科書p.130) stderr: 標準エラー出力

標準エラー出力を用いたプログラムの実行 リダイレクトを用いて実行してみる Z:\nyumon2\hello>hello2 または  Z:\nyumon2\hello>more < hello2.txt  Z:\nyumon2\hello>more < err2.txt Z:\nyumon2\hello>hello2 > hello2.txt Z:\nyumon2\hello>hello2 2> err2.txt Z:\nyumon2\hello>hello2 >hello2.txt 2>err2.txt

標準入力、標準出力を用いたプログラム 以下のプログラムを typ.c と名づけて保存し、コンパイルせよ (自作コマンドのための第1歩) CL コマンドを用いること /* typ.c: stdin type */ #include <stdio.h> int main(void) { int c; while ((c=fgetc(stdin)) != EOF) fputc(c,stdout); return 0; } stdin から変数c に1文字分入力 ファイルの終わりまで続ける stdout に1文字出力 fgetc(): ファイルから1文字入力 fputc(): ファイルに1文字出力 stdin: 標準入力 EOF: ファイル終端

標準入力表示プログラムの実行 Z:\nyumon2>typ < typ.c Z:\nyumon2>typ abc... 123... ^Z Z:\nyumon2>dir | typ type コマンドや more コマンドと 動作を比べてみよ 教科書p.139 問題14.3参照 万一、プログラムが 終われなくなったら、 Ctrl-c で強制終了 Ctrl-z を入力

コマンド行引数 プログラムの後にオプションを付けられるようにする (→自作コマンドのための第2歩) main(void) → main(int argc, char *argv[ ]) int argc: コマンド行の文字列数 char *argv[ ]: コマンド行の文字列配列 例: Z:\nyumon2>mainarg 1.2345 abcde !"#$%&'() argc=4 argv[0]="mainarg" argv[1]="1.2345" argv[2]="abcde" argv[3]="!#$%&'()"

コマンド行確認プログラム mainarg.c を作成し、コンパイル・実行せよ /* mainarg.c: main argument test */ #include <stdio.h> int main(int argc, char *argv[]) { int i; printf("argc = %d\n", argc); for (i = 0; i < argc; i++) { printf("argv[%d] = \"%s\"\n", i, argv[i]); } return 0; エスケープ系列 (教科書p.180)

関数 system( ) 関数 system( ) を用いると、プログラム内からコマンドプロンプトのコマンドが利用できる stdlib.h ヘッダが必要 hello3.c /* hello world program 3 */ #include <stdio.h> #include <stdlib.h> int main(void) { system("cls"); printf("hello world!\n"); return 0; } hello.c に この行を追加 この行も追加 cls について 調べてみよう

制御コード 2 \" 2重引用符 \' 単一引用符 \t 水平タブ \\ 円マーク(バックスラッシュ) 教科書 p.180 表A.2 制御コード 2 \" 2重引用符 \' 単一引用符 \t 水平タブ \\ 円マーク(バックスラッシュ) hello4.c /* hello world program 4 */ #include <stdio.h> #include <syslib.h> int main(void) { system("cls"); printf("\\\'hello world!\'\n"); return 0; } この部分を追加

文字列を途中で改行するときは必ずダブルクォートで区切る Officeアプリケーションを開く Excel の実行ファイル(Excel.exe)のありかを確認し、直接実行するプログラムを作る /* Excel exec program */ #include <stdio.h> #include <stdlib.h> int main(void) { system("\"C:\\Program Files\\" "Microsoft Office\\" "Office11\\Excel.exe\""); return 0; } excel2.c 文字列を途中で改行するときは必ずダブルクォートで区切る コマンドにスペースがあるときは 全体をダブルクォート(\")でくくる Word(Winword.exe) や PowerPoint(Powerpnt.exe) を開くプログラムも作ってみよ

スキルアップタイム ~コマンド行引数を用いた自作コマンドの作成~ コマンド行で指定した文字の数をカウントする chc.c を完成させよう /* chc.c: char counter */ #include <stdio.h> int main(int argc, char *argv[]) { int c, cnt=0; while ((c=fgetc(stdin)) != EOF) { if ( ) ; } printf(" ", ); return 0;

文字数カウンタ chc の実行例 chc のソースファイルで 試した例 Z:\nyumon2>chc i < chc.c argc = 2 argv[0] = "chc" argv[1] = "i < chc.c" chc のソースファイルで 試した例 Z:\nyumon2>chc i < chc.c i: 10 Z:\nyumon2>chc abc < chc.c a: 6 argc = 2 argv[0] = "chc" argv[1] = "abc < chc.c" 万一、プログラムが 終われなくなったら、 Ctrl-c で強制終了

スキルアップタイム (オプション) excel2.c を改良し、ファイル名を指定できるように せよ(excel3.c) コマンド行でファイル名を指定 excel 実行用文字列に argv[1] を連結 strcat 関数の利用 excel 実行用文字列は初期値で与える argc = 1 のときは連結しない 連結された文字列をsystem関数に渡す