Eu não acredito que isso seja possível. A chamada de sistema exec (2) sempre requer um nome de arquivo ou caminho absoluto (o nome do arquivo é sempre um %código%). char*
também tem requisitos semelhantes para um nome de arquivo.
O mais próximo que você pode fazer é canalizar a saída em um pipe nomeado e tentar executar a partir do pipe. Isso pode funcionar, embora o shell possa se recusar a executar qualquer arquivo que não tenha o posix_spawn
bits definido. Crie o canal com --x--x--x
e veja se você consegue fazê-lo funcionar.
Outra abordagem seria escrever algo que lê entrada padrão, grava um arquivo em uma área temporária, configura os bits -x nele, forks e execs, em seguida, exclui o arquivo. O inode e o conteúdo permanecerão até que o programa termine a execução, mas não será acessível através do sistema de arquivos. Quando o processo terminar, o inode será liberado e o armazenamento será retornado para a lista livre.
EDIT: Como Mat aponta, a primeira abordagem não funcionará como o carregador tentará demandar a página no executável, o que gerará tráfego de busca aleatório no arquivo, e isso não é possível em um tubo. Isso deixa algum tipo de abordagem como a segunda.