C Распечатать, какой файл находится в стандартном stdin после использования dup2
Я пишу небольшую оболочку на C, которая работает на Linux. Поскольку в этом задействовано много ошибок, я хотел бы спросить, есть ли способ напечатать то, что находится внутри позиции 0. Например, если я вызываю dup2(file_name,0), есть ли способ напечатать file_name, чтобы я мог использовать это для отладки?
2 ответа
Вы не можете получить имя файла из dup2. Как вы можете прочитать здесь, он возвращает только int
значение:
int dup2(int fildes, int fildes2);
Что вы можете сделать в Linux:
Вы можете использовать readlink в /proc/self/fd/NNN, где NNN - дескриптор файла. Это даст вам имя файла, как это было, когда он был открыт [здесь]
Или что-то более творческое создает struct
где вы можете ассоциировать fildes
к filename
,
Что-то вроде этого:
struct Files{
int fildes;
char filename[50];
} files;
Если у вас больше одного, просто создайте массив и выбирайте тот, который вам нужен каждый раз; таким образом, вы всегда можете сопоставить его с filename
,
Если вы используете операционную систему Linux, вы можете легко показать свою таблицу описания файлов для каждого процесса в каталоге linux, хранящемся в /proc/, по их идентификатору процесса, папке fd показать таблицу описания файла процесса, например
ls -l /proc/1405/fd