如何在c++代码中使用管道
How can I use pipe in this code C++?
我遇到了大麻烦,因为我不知道如何做到这一点。我只需要创建2个进程,可以通信。这是代码:
/* Wrappers */
this->sock_fd = this->w_socket();
this->w_bind();
this->w_listen();
std::cout << "[info] Server is running..." << std::endl;
while(1)
{
/*Connection stuff */
struct sockaddr_in client_addr;
int client_fd = this->w_accept(&client_addr);
char client_ip[64];
int client_port = ntohs(client_addr.sin_port);
inet_ntop(AF_INET, &client_addr.sin_addr, client_ip, sizeof(client_ip));
std::cout << "[info] Connection from (" << client_ip
<< ", " << client_port << ")" << std::endl;
/*Login manager*/
...
/* Crate PID */
int pid = fork();
if (pid == 0)
{
close(this->sock_fd);
this->manage(client_fd, client_ip, client_port);
exit(0);
}
/* End connection */
close(client_fd);
}
。当客户端通过身份验证成功后,登录管理器,即可向服务器发送数据。如果一个客户端已连接,而另一个客户端已登录,则第二个客户端必须用"您已断开连接"消息踢开第一个客户端。我怎么能用叉子和管子来做呢?我试着读了一些关于这方面的东西,但是我有点困惑。
谢谢。
我不确定你的项目的具体设计,但如果你使用fork()从现有的一个创建一个新的客户端,你想使用管道()来通信,这里是一个示例代码。
int pfds[2]; //pipe() always return pair of file descriptors(fds).
char buf[30];
pipe(pfds); //fds will be stored in pfds.
if (!fork()) {
printf(" CHILD CLIENT: writing to pipen");
write(pfds[1], "New Client", 11);
printf(" CHILD CLIENT: exitingn");
exit(0);
} else {
printf("PARENT CLIENT: reading from pipen");
read(pfds[0], buf, 11);
printf("PARENT CLIENT: read "%s"n", buf);
//Take appropriate Action upon read!!!
wait(NULL);
}
我个人认为对于这种通信(信号或共享内存),有比使用管道更好的选择
看看ZMQ: http://www.zeromq.org/
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- Gstreamer 管道从命令 lne 到 c 代码
- 在 Azure DevOps 构建管道中使用英特尔C++编译器为 Linux 环境构建C++代码
- 获取错误代码 998 尝试从命名管道读取时对内存位置的访问无效
- 为什么使用valgrind时管道会变得混乱的代码 --xml-fd
- 正确的代码 - 带 popen 的非阻塞管道
- gstreamer 管道代码,用于通过来自相机的实时流式传输而不是图像显示文本
- 为什么这个代码在到达管道时会停止运行
- 如何在c++代码中使用管道
- 此管道通信代码有什么问题?
- 支持XNAWP7和闪存与现有的C++代码库-管道,工具和方法