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

outputlooks, как это изображение

Другие вопросы по тегам