記述子しかわからないときにファイルを実行する必要があります。ファイルへのリンクがない可能性もあるので、どういうわけか名前を見つけることはオプションではありません。すべてのexecve()、execvp()などの関数はファイル名を取ります。dlopen()にも名前が付けられます。
醜い解決策(ファイルの読み取りや関数ポインタの呼び出しなど)は問題ありません。
記述子しかわからないときにファイルを実行する必要があります。ファイルへのリンクがない可能性もあるので、どういうわけか名前を見つけることはオプションではありません。すべてのexecve()、execvp()などの関数はファイル名を取ります。dlopen()にも名前が付けられます。
醜い解決策(ファイルの読み取りや関数ポインタの呼び出しなど)は問題ありません。
を使用しfexecve
ます。
PS:ファイルを読み取って関数ポインタを呼び出すことは間違いなくOKではありません。:)
面白い。最善の策は、一時ファイルを作成する必要があるFDを使用してから、通常のexec呼び出しを使用して実行することだと思います。
を使用mkstemp
して、保証された一意のファイル名を作成できます。次に、ファイル記述子からコンテンツを読み取り、一時ファイルにダンプします。次に、exec呼び出しでmkstempによって指定された名前を使用します。
何らかの理由で新しいファイルを書きたくない場合は、exeファイルのイメージを手動で解析し、メモリに適切にロードしてから、main()関数を呼び出す以外に方法はないと思います。これは、OSにすでに存在する多くの機能を複製しているので、やりたくないと思います。正しく理解するのは難しいでしょうし、努力する価値はないようです。