Если вы не контролируете источник для программы, которую вы упаковываете, и она еще не предоставляет средства для получения ввода другим способом, вам в лучшем случае будет трудно.
Одна из возможностей - перехватить файл и открыть вызовы, используемые программой, хотя это ужасный способ сделать это.
Это, вероятно, потребует внедрения ваших собственных библиотек времени выполнения, содержащих (для C) fopen
, fclose
, fread
и так далее, между программой и реальными библиотеками (такими как LD_LIBRARY_PATH
или что-то подобное) и это при условии, что оно не связано статически. Не то, что для слабонервных.
Если вы беспокоитесь о том, что люди могут видеть ваш файл, есть множество способов избежать этого, например, создав его с разрешениями rwx------
в аналогично защищенном каталоге (при условии UNIX-подобной ОС). Это, вероятно, безопаснее, чем использовать аргументы командной строки, которые любой вошедший в систему джокер может узнать с помощью команды ps
.
Если вы просто не хотите создавать файл, я думаю, вам не придется его избегать, это будет намного больше.
В зависимости от того, что вы на самом деле ищете, не составит большого труда собрать программу, которая принимает аргументы, записать их во временный файл, называемый real программой с этим временным именем файла, затем удалил файл.
Это все равно будет записываться на диск, но это больше не будет ответственностью вашей программы-оболочки. Что-то вроде (немного грубовато, но вы должны понять):
#include <stdio.h>
#define PROG "myProgram"
int main (int argCount, char *argVal[]) {
char *tmpFSpec;
FILE *fHndl;
int i;
char *cmdBuff;
tmpFSpec = getTempFSpec(); // need to provide this.
cmdBuff = malloc (sizeof(PROG) + 1 + strlen (tmpFSpec) + 1);
if (cmdBuff == NULL) {
// handle error.
return 1;
}
fHndl = fopen (tmpFSpec, "w");
if (fHndl == NULL) {
// handle error.
free (cmdBuff);
return 1;
}
for (i = 1; i < argCount; i++)
fprintf (fHndl, "%s\n", argVal[i]);
sprintf (cmdBuff, "%s %s", PROG, tmpFSpec);
system (cmdBuff);
return 0;
}