Могу ли я использовать dup2() для отправки вывода на стандартный вывод вместо сокета домена Unix?Linux

Anonymous
Могу ли я использовать dup2() для отправки вывода на стандартный вывод вместо сокета домена Unix?

Сообщение Anonymous »

Кажется, легко найти примеры использования dup2() для того, чтобы вывод (изначально) предназначенный для стандартного вывода, вместо этого направлялся в сокет:

Код: Выделить всё

char *stdoutMsg = "This message will be sent to stdout\n";
write(STDOUT_FILENO,stdoutMsg,strlen(stdoutMsg));
// message sent to stdout
int sockid = socket(PF_UNIX,SOCK_STREAM,0);
dup2(sockid,STDOUT_FILENO);
close(sockid);
send(STDOUT_FILENO,stdoutMsg,strlen(stdoutMsg),0);
// message now sent to socket
По нескольким причинам — детали скучны и, вероятно, не имеют значения — я бы хотел сделать обратное; привести к тому, что вывод (изначально), предназначенный для сокета (домена Unix), вместо этого будет идти на стандартный вывод:

Код: Выделить всё

int sockid = socket(PF_UNIX,SOCK_STREAM,0);
char *sockMsg = "This message will be sent to socket\n";
send(sockid,sockMsg,strlen(sockMsg),0);
// message sent to socket
dup2(STDOUT_FILENO,sockid);
close(STDOUT_FILENO);
write(sockid,sockMsg,strlen(sockMsg));
// message not sent to stdout
Похоже, это не работает — ни в одном случае. В чем проблема, могу ли я заставить это работать?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ain-socket

Вернуться в «Linux»