質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

2457閲覧

Swiftのコマンドラインツールで標準入力を待っている間にCtrl+Cを検知するには?

takmaru

総合スコア10

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2014/09/09 15:32

lang

1let stdin = NSFileHandle.fileHandleWithStandardInput() 2let data = stdin.availableData

として標準入力を待っています。

Returnを押した時、Ctrl+Cとした時、共にdataには"0x0a"が入っているだけで判断つきません。

Returnだけの場合は再入力。
Ctrl+Cなら終了処理。
としたいのですが、どう判断すればいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Swiftは詳しくないので中途半端な回答になり申し訳ありません。

MacOSXでは、ターミナルでプロセス実行時にCtrl+Cが押されると、そのプロセスに対してシグナルが発生していると思います。
(どのシグナルなのかがちょっと分かりませんでした。すみません。)

シグナルは割り込み処理なので、例外ハンドラーなどでコールバック処理を設定すれば、発生時に処理をさせることができます。(トラップと言います)
ただし、SIGKILLは、トラップするとプロセスが終了できなくなってしまうので、トラップできないと思います。

NSSetUncaughtExceptionHandler, signal で検索すると、Objective-Cの情報が見つかります。
Swiftでも同じようにできるかも知れません。

参考URL:

投稿2014/09/11 07:11

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takmaru

2014/09/11 17:36

回答、ありがとうございます。 Objective-Cでは ''' void OnSignal(int sig) { } signal(SIGINT, OnSignal); ''' でCtrl+Cの割り込みに反応できました。 ですが、Swiftではsignalが使えません。 紹介いただいたNSSetUncaughtExceptionHandlerも使えませんでした。 (少なくともXCode 6.0では)
argius

2014/09/12 00:30

signal.hとNSException.hにsignalとNSSetUncaughtExceptionHandlerがあるみたいなので、これを使えると良さそうなんですけれど。 シグナルハンドラーの部分だけObjective-Cで書いて、それを呼び出すようにした方が早いかもしれません。 (回答にリンクを追加しました。) 手元に古いOSXしかないため、実際に確認できなくてすみません。 近いうちにXcode6環境を導入して勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問