Я создаю небольшую оболочку, и у меня возникают некоторые проблемы с двумя из моих функций. Они вроде бы вне контекста, но я надеюсь, что вы поймете, что я пытаюсь сделать, поэтому мне не нужно публиковать весь мой код.Создание собственных редиректов и дублирующих функций труб
Моя функция dupPipe: Я хочу дублировать трубу в дескриптор файла ввода-вывода std и закрыть оба конца трубы. Это выглядит так: int dupPipe(int pip[2], int end, int destinfd);
. Где конец указывает, какой канал дублировать, либо READ_END, либо WRITE_END, и destinfd сообщает, какой дескриптор файла ввода std заменить.
My Redirect function: Предполагается перенаправить дескриптор файла ввода/вывода std в файл. Похоже, это int redirect(char *file, int flag, int destinfd);
. Где флаг указывает, следует ли читать или записывать файл, а destinfd - дескриптор файла std I/O, который я хочу перенаправить.
То, что я сделал:
int dupPipe(int pip[2], int end, int destinfd)
{
if(end == READ_END)
{
dup2(pip[0], destinfd);
close(pip[0]);
}
else if(end == WRITE_END)
{
dup2(pip[1], destinfd);
close(pip[1]);
}
return destinfd;
}
Вторая функция:
int redirect(char *filename, int flags, int destinfd)
{
if(flags == 0)
{
return destinfd;
}
else if(flags == 1)
{
FILE *f = fopen(filename, "w");
if(! f)
{
perror(filename);
return -1;
}
}
else if(flags == 2)
{
FILE *f = fopen(filename, "r");
if(! f)
{
perror(filename);
return -1;
}
}
return destinfd;
}
Я признателен за любую помощь, оказанную, то, что я сделал неправильно или не сделали с функцией, которую я написал хотел ? Благодарю.
is destfd == destinfd? –
Вы не используете dup2 return, и вы должны использовать функцию «open» – eroween