Head First C ―頭とからだで覚えるCの基本
(オライリージャパン)
David Griffiths (著) Dawn Griffiths (著)
中田 秀基(監訳)(翻訳) 木下 哲也 (翻訳)
開発環境
- OS X Mavericks - Apple、たまにFreeBSD 10(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- C (プログラミング言語)
- Clang/LLVM (コンパイラ)
初めてのPerl 第6版 (Randal L. Schwartz (著)、brian d foy (著)、Tom Phoenix (著)、近藤 嘉雪 (翻訳)、オライリージャパン)の16章(プロセス管理)の16.9(練習問題)2.をC言語で考えてみる。
その他参考書籍
- プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)
- プログラミング言語Cアンサー・ブック 第2版 (クロビス・L.トンド、スコット・E.ギンペル(著)、矢吹 道郎(翻訳))
- C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、 谷口 功 (翻訳)、 オライリージャパン)
16.9(練習問題)2.
コード(BBEdit, Emacs)
sample2.c
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> int main(int argc, char *argv[]) { FILE *out_fh = fopen("ls.out", "w"); FILE *err_fh = fopen("ls.err", "w"); int out_descriptor; int err_descriptor; char *dir = argc == 1 ? "/" : argv[1]; if (!out_fh) { fprintf(stderr, "ls.outファイルを開けません。\n"); exit (1); } if (!err_fh) { fprintf(stderr, "ls.errファイルを開けません。\n"); exit (1); } out_descriptor = fileno(out_fh); err_descriptor = fileno(err_fh); if (dup2(out_descriptor, 1) == -1) { fprintf(stderr, "標準出力をリダイレクトできません。\n"); exit (1); } if (dup2(err_descriptor, 2) == -1) { fprintf(stderr, "標準エラーをリダイレクトできません。\n"); exit (1); } if (execlp("ls", "ls", "-l", dir, NULL) == -1) { fprintf(stderr, "%s\n", strerror(errno)); exit (1); } return (0); }
Makefile
CC=cc CFLAGS=-g -Wall SRC=sample2.c OBJ=sample2.o all: sample2 sample2: $(OBJ) $(CC) $(CFLAGS) $(OBJ) -o sample2 sample2.o: sample2.c $(CC) $(CFLAGS) -c sample2.c -o sample2.o clear: rm -rf sample2 $(OBJ)
入出力結果(Terminal)
$ make cc -g -Wall -c sample2.c -o sample2.o cc -g -Wall sample2.o -o sample2 $ ./sample2 / $ cat ls.out total 16437 drwxrwxr-x+ 61 root admin 2074 Aug 13 09:16 Applications drwxr-xr-x+ 66 root wheel 2244 May 13 19:51 Library drwxr-xr-x@ 2 root wheel 68 Aug 25 2013 Network drwxr-xr-x+ 4 root wheel 136 Apr 22 02:37 System drwxr-xr-x 6 root admin 204 Apr 26 05:24 Users drwxrwxrwt@ 6 root admin 204 Aug 19 17:25 Volumes drwxr-xr-x@ 39 root wheel 1326 Jul 1 08:51 bin drwxrwxr-t@ 2 root admin 68 Aug 25 2013 cores dr-xr-xr-x 3 root wheel 4447 Aug 11 03:25 dev lrwxr-xr-x@ 1 root wheel 11 Apr 22 02:18 etc -> private/etc dr-xr-xr-x 2 root wheel 1 Aug 11 03:25 home -rwxr-xr-x@ 1 root wheel 8394000 Jun 4 13:27 mach_kernel dr-xr-xr-x 2 root wheel 1 Aug 11 03:25 net drwxr-xr-x 5 root wheel 170 Jul 25 13:33 opt drwxr-xr-x@ 6 root wheel 204 Apr 22 02:49 private drwxr-xr-x@ 62 root wheel 2108 Jul 1 08:51 sbin lrwxr-xr-x@ 1 root wheel 11 Apr 22 02:19 tmp -> private/tmp drwxr-xr-x@ 10 root wheel 340 May 27 09:14 usr lrwxr-xr-x@ 1 root wheel 11 Apr 22 02:19 var -> private/var $ cat ls.err $ rm ls.* remove ls.err? y remove ls.out? y $ ./sample2 abcde $ cat ls.out $ cat ls.err ls: abcde: No such file or directory $
0 コメント:
コメントを投稿