タグ

execに関するakaneharaのブックマーク (5)

  • fork/execモデルの起源 - Plan9日記

    UNIXを勉強すると、forkとexecが分離されていることに疑問を持ち、パイプやリダイレクトを使ってシェルを作り、その合理性に感動するというのが、お決まりのパターンになっているが、なぜこんな実装が生まれてきたのだろう。 WindowsのネイティブAPIであるNtCreateProcessや、その祖先とも言える*1VMSのsys$creprcは、意味的にはforkとexecが一体化されている。まぁ、こっちの方がプロセス生成という意味では自然なアプローチに感じられるが、sys$creprcの山のような引数を見ると、これを使ってプログラムを書く気は萎えてくる。input、output、errorって標準入出力のバインディングを変えるためだろうか。そうだとすると、UNIXモデルの方がシンプルで理に適っている。 fork、execはUNIX V1のころから存在するのだが、「The Evolutio

    fork/execモデルの起源 - Plan9日記
  • flockコマンドをflock関数みたいに使う - 揮発性のメモ2

    flock(1)をflock(2)みたいに使いたい Stray Penguin - Linux Memo (BASH) ここに書いてあるとおりに実施する 関数定義 # ロック (ロックファイル名) filelock () { exec 9>>$1 flock -x 9 } # アンロック fileunlock () { exec 9>&- } 使い方 echo "HEAVEN OR HELL" filelock /tmp/hoge echo "LET'S LOCK" sleep 10 echo "SLASH" fileunlock exec 9>>$1 http://chaichan.web.infoseek.co.jp/src/BSH.htm#B13 を読む execによるリダイレクトで番号を自動で割り振る ファイルディスクリプタ 9番 を、引数(/tmp/hoge)への追記としてオー

    flockコマンドをflock関数みたいに使う - 揮発性のメモ2
  • コンピューター:C言語講座:fork,exec,pipeについて

    コンピューター:C言語講座:fork,exec,pipeについて このテーマはどちらかというとUNIX系の話題になってしまうのですが、PC系ではDOSの時代にはマルチタスクができませんでしたので、平行には走れませんでしたが、C言語の処理系独自の関数がたくさんありました。WindowsになってからはUNIX系と似てきましたが、まだ少し違うようです。 自分で作成したプログラムから他のコマンドを実行したい、ということは良くあることだと思います。例えば、ディレクトリーの中身を簡単に得たい場合などはUNIXではlsコマンドを実行させて、結果をもらうのが簡単に思い付くと思います。とくにUNIXのコマンドはそのように組み合わせて使いやすくできていて、必要な情報だけを明確に返答するコマンドがほとんどです(その分、初心者が自分でコマンドを使う時に不親切なのですが)。 system() 大抵の人が上記のような

  • C言語execメモ(Hishidama's C "exec" Memo)

    S-JIS[2012-11-17] exec系関数 execは、C言語で別プログラムを実行(execute)する関数。 概要 exec系の関数は、別プログラムを実行する。 「exec」という関数そのものは無くて、execl・execv・execvp等のいくつかのバリエーションがある。 exec系関数によって別プログラムを実行すると、制御はそのプログラムへ移行し、自プログラムへは戻ってこない。(execの実行に失敗した場合だけ戻ってくる) 自分の処理を続行したい場合はfork()と組み合わせて使用する。 →forkと組み合わせる例 別プロセスを実行する方法は、execの他にもsystem(シェルの機能を使ってコマンドを実行する)やpopen(パイプで通信可)等がある。 execの種類 execl(exec「L」)は引数が可変長引数になっていて、execv(exec「v」)は引数が配列になって

  • Perlの組み込み関数 exec の翻訳 - perldoc.jp

    The exec function executes a system command and never returns; use system instead of exec if you want it to return. It fails and returns false only if the command does not exist and it is executed directly instead of via your system's command shell (see below). exec 関数は、システムのコマンドを実行し、戻ってはきません; 戻って欲しい場合には、execではなく system 関数を使ってください。 コマンドが存在せず、しかも システムのコマンドシェル経由でなく 直接コマンドを実行しようとした場合にのみこの関数は失敗して偽を返しま

  • 1