2015-01-02 2 views
5

Возможно ли получить доступ к исходному указателю argv изнутри Haskell main?Доступ к оригинальному указателю argv от Haskell

Моим вариантом использования является то, что я хочу удалить параметры командной строки после запуска приложения, чтобы их нельзя было читать через ps. Есть несколько способов сделать это, но все требуют манипулирования оригиналом argv.

Я могу это сделать, если я пишу C оболочку и вызвать hs_init оттуда (впоследствии отводом вокруг с argv ала here), но было бы лучше сделать это с Haskell.

Спасибо!

PS - этот вопрос отличается от duplicate, поскольку дубликат использует prctl, который, насколько я могу судить, позволяет вам изменять имя процесса. Кроме того, дубликат ищет «установить» argv[0], тогда как я пытаюсь получить изменчивую ссылку на оригинал argv, используемый для вызова программы.

+3

Моя первоначальная догадка заключается в том, что это невозможно из Haskell, поскольку функция 'setArgs' не существует, а' getArgs' возвращает неизменный список. – bheklilr

+0

Спасибо. Я проливал код FFI и пришел к такому же выводу, но, поскольку я относительно новичок в этом, я не знал, есть ли другой способ. – aaronlevin

+1

Это то, о чем я даже не знал, было возможно 5 минут назад, так что может быть и так, но если есть способ, в него войдет какая-то странная функция угла во внутренней библиотеке. Посмотрите в специфические библиотеки GHC, так как это, вероятно, будет зависеть от того, какой компилятор вы используете. – bheklilr

ответ

0

Я бы рассмотрел модуль (link) из пакета unix.

Он содержит функции для изменения окружения, и хотя он предоставляет только getArgs, нетрудно добавить функцию setArgs.

+0

Эта стратегия, похоже, не работает. Попробуйте этот код [здесь] (https://gist.github.com/bheklilr/ec78cc20e78479029812), который очень похож на метод 'getArgs' в' System.Posix.Env.ByteString'. Может быть, это связано с некоторой ленивой оценкой? Не уверен. – aaronlevin

+0

hmmm ... даже если вы добавите 'getArgs >> = print', в конце будут напечатаны оригиналы args. интересно, почему это происходит. – ErikR

Смежные вопросы