C语言 模拟流数据



我正在尝试编写一个程序,该程序将从平面数据文件中读取并模拟流式传输,以便我可以测试读取流数据的程序,而无需连接和启动流式处理硬件。

实现这一目标

的现实方法是什么?我需要它以可变速度流式传输,具体取决于硬件 im 模拟。

到目前为止,我的两个想法是写入命名管道的程序,或者以我需要的速率写入虚拟串行端口的程序。

有没有更好(更现实)的方法来模拟流数据?

设置一个后台进程,以所需的任何速率将文件写入套接字。在 Perl 中,

use Socket;
socketpair my $A, my $B, AF_UNIX, SOCK_STREAM, PF_UNSPEC;
if (fork() == 0) {
    stream();
    exit;
}
while (<$A>) {
    print;
}
sub stream {
    # output 1024 bytes/sec
    select $B; $| = 1;          # disable output buffering
    open my $fh, '<', '/file/to/stream';
    my $buffer;
    while (my $n = read $fh, $buffer, 1024) {
        sleep 1;
        print $B $buffer;
    }
    close $fh;
}

我会以最接近原始流数据源的方式模拟流。 例如,如果您通常从网络套接字获取流,则使用网络套接字进行模拟; 如果您有串行端口,则使用虚拟串行端口等。 否则,您将需要一个用于流使用者代码的适配器(但我认为您已经知道所有这些)。

除此之外,您还需要一个速率限制算法,该算法允许您控制要发送的数据量。快速搜索使我找到了这个,但肯定有更复杂和更复杂的算法。扬子晚报.

当然,这假设您知道如何为流的使用者创建有效的数据/数据包。

您可以尝试通过查看 trickle(用户空间带宽整形器)来节省一些编码时间。

相关内容

  • 没有找到相关文章

最新更新