c - 套接字和数据持久性

标签 c sockets scope

这可能是一个新手问题,但如果我打开并向套接字写入一些数据,然后退出子例程,使套接字超出范围,然后稍后尝试从另一个程序读取数据,当原始声明超出范围时,数据还会存在还是会消失?

谢谢,

N.

更多信息:

我正在尝试重写 2 个使用文件作为通信接口(interface)的程序。一般流程是:

主要进程:写入数据。

主进程:将次级进程生成到集群中的其他节点上

主要过程:WAITING次要过程完成。

二级进程:读数据(主进程写的)

次要进程:写入数据

次级进程:退出

主进程:读取数据。

所以我基本上想用套接字替换文件的写入/读取/写入/读取(这应该快得多!)

最佳答案

对于 TCP 套接字,您需要在发送数据之前打开双向连接,因此如果您没有接收端,则该问题无关紧要。

对于 UDP,如果在您发送数据时没有人在套接字上监听,则除非您设法以足够快的速度打开监听程序以使数据仍在网络驱动程序中传输,否则没有人会收到它。但不要指望它,因为驱动程序内部的“localhost loopback”传送数据的时间不会超过几微秒。

附言如果您更详细地描述您的具体情况,也许您会得到更合适的答案。你想达到什么目的?


关于您的“更多信息”。您不能通过简单地用套接字替换文件并保持当前方案来对套接字执行此操作。但是,您可以尝试通过首先生成子进程来更改方案,然后才通过套接字向它们发送数据。 children 完成后,他们通过套接字向 parent 返回一个答案,然后退出。

从某种意义上说,这里效率低下,因为您必须分别向每个 child 发送相同的数据(除非您可以使用多播)。

我不确定套接字对您来说会比文件快得多,但它们对于更复杂的方案肯定会更安全,并且还允许在不共享文件系统的机器之间进行分发。

关于c - 套接字和数据持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1216508/

相关文章:

c++ - 无法绑定(bind)超过 1021 个端口

python - if __name__ == __main__ 的范围

在 Solaris 下不能用信号量编译代码?

c++ - 通过 select() 实现非阻塞 udp 套接字

c - 使用 setsockopt;当套接字从另一端关闭时,read 返回 0 而不是 -1

ruby - 模块如何解析常量的作用域?

c++ - 令人困惑的 C++ 全局范围问题

c - 对 `pthread_create' 的 undefined reference -pthread 不工作

c++ - 如何使用 UART 传输数据结构?

有人可以告诉用户如何让用户输入数组中的元素并在最后一个位置插入元素吗?