Kann ich dup2() verwenden, um die Ausgabe an stdout statt an einen Unix-Domain-Socket zu senden?Linux

Linux verstehen
Anonymous
 Kann ich dup2() verwenden, um die Ausgabe an stdout statt an einen Unix-Domain-Socket zu senden?

Post by Anonymous »

Es scheint einfach zu sein, Beispiele für die Verwendung von dup2() zu finden, um zu bewirken, dass die (ursprünglich) für stdout vorgesehene Ausgabe stattdessen an einen Socket geht:

Code: Select all

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
Aus mehreren Gründen – die Details sind langweilig und wahrscheinlich irrelevant – würde ich gerne das Gegenteil tun; bewirken, dass die (ursprünglich) für einen (Unix-Domänen-)Socket vorgesehene Ausgabe stattdessen an stdout:
geht

Code: Select all

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
Das scheint nicht zu funktionieren – in keinem Fall. Was ist das Problem? Kann ich das zum Laufen bringen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post