2014年8月19日火曜日

開発環境

初めてのPerl 第6版 (Randal L. Schwartz (著)、brian d foy (著)、Tom Phoenix (著)、近藤 嘉雪 (翻訳)、オライリージャパン)、16章(プロセス管理)の16.9(練習問題)2.をSwiftで考えてみる。

16.9(練習問題)2.

コード(Xcode)

main.swift

//
//  main.swift
//  sample2
//
//  Created by kamimura on 8/19/14.
//  Copyright (c) 2014 kamimura. All rights reserved.
//

import Foundation

func error(msg:String) {
    let stderr = NSFileHandle.fileHandleWithStandardError()
    stderr.writeData((msg + "\n").dataUsingEncoding(NSUTF8StringEncoding))
    exit(1)
}

let dir = String.fromCString(C_ARGV[1])

let stdout = NSFileHandle.fileHandleWithStandardOutput()
let stderr = NSFileHandle.fileHandleWithStandardError()

let out_fh = fopen("ls.out", "w")
let err_fh = fopen("ls.err", "w")

if !out_fh {
    error("ls.outファイルを開けません。")
}
if !err_fh {
    error("ls.errファイルを開けません。")
}

let out_descriptor:Int32 = fileno(out_fh)
let err_descriptor:Int32 = fileno(err_fh)

if dup2(out_descriptor, 1) == -1 {
    error("標準出力をリダイレクトできません。")
}
if dup2(err_descriptor, 2) == -1 {
    error("標準エラーをリダイレクトできません。")
}
var task = NSTask()
task.launchPath = "/bin/ls"
task.arguments = ["-l", dir!]
task.launch()

入出力結果(Console Output)

$ ./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 18:32 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 コメント:

コメントを投稿