В ответ на ваш вопрос:
Будет ли это работать?
Нет.dup2()
принимает два файловых дескриптора (int
с), в то время как вы передаете ему FILE *
и int
.Вы не можете смешивать файл дескрипторы (FILE *
с) и файл дескрипторы (int
с) таким образом.
Вы можете использовать open
вместоfopen
, чтобы открыть файл как дескриптор файла вместо дескриптора файла, или вы можете использовать fileno
, чтобы получить дескриптор файла из дескриптора файла.Или вы можете использовать freopen
для повторного открытия дескриптора файла stdin
для нового файла.
Обратите внимание, что файловые дескрипторы (int
s) являются частью операционных систем POSIX и переносимы только на другие системы POSIX., в то время как файловые дескрипторы (FILE *
s) являются частью стандарта C и переносимы везде.Если вы используете файловые дескрипторы, вам придется переписать свой код, чтобы он работал в Windows.