怎么将标准输入重定向到socket套接字上
时间: 2024-03-10 07:47:31 浏览: 159
要将标准输入重定向到socket套接字上,你可以使用dup2()函数。dup2()函数可以将一个文件描述符复制到另一个文件描述符上,从而实现文件描述符的重定向。
具体而言,你可以使用socket()函数创建一个socket套接字,并使用connect()函数将其连接到远程主机。然后,你可以使用dup2()函数将标准输入的文件描述符(即0)复制到socket套接字的文件描述符上,然后关闭原来的标准输入文件描述符。
下面是一个示例代码:
```
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
// 创建socket套接字
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket() failed");
return 1;
}
// 连接到远程主机
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(sockfd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
perror("connect() failed");
return 1;
}
// 将标准输入重定向到socket套接字上
if (dup2(sockfd, 0) < 0) {
perror("dup2() failed");
return 1;
}
close(sockfd);
// 从标准输入读取数据并发送到socket套接字上
char buf[1024];
while (fgets(buf, sizeof(buf), stdin) != NULL) {
if (send(1, buf, strlen(buf), 0) < 0) {
perror("send() failed");
return 1;
}
}
return 0;
}
```
阅读全文