小编Joh*_*ine的帖子

使用 tc 限制端口带宽

我正在尝试使用 限制一系列端口(共同)的最大带宽tc。下面是脚本:

tc qdisc add dev eth0 root handle 1: htb default 10;
tc class add dev eth0 parent 1: classid 1:1 htb rate 75kbit;
tc qdisc add dev eth0 parent 1:1 handle 2: sfq perturb 10
tc filter add dev eth0 parent 1: protocol ip u32 match ip sport 5000 0xffff flowid 1:1;
tc filter add dev eth0 parent 1: protocol ip u32 match ip sport 5001 0xffff flowid 1:1;
Run Code Online (Sandbox Code Playgroud)

上面的脚本运行良好,但这些端口上的带宽不受限制。

当我检查状态时,我找不到这些端口的任何过滤器:

$ tc class show dev …
Run Code Online (Sandbox Code Playgroud)

linux tcp linux-kernel bandwidth-throttling

6
推荐指数
0
解决办法
1910
查看次数

为超大文件准备

我正在使用pread以下方式读取大文件:

ssize_t s = pread(fd, buff, count, offset);
if (s != (ssize_t) count)
  fprintf(stderr, "s = %ld != count = %ld\n", s, count);
assert(s == (ssize_t ) count);
Run Code Online (Sandbox Code Playgroud)

上面的代码对于小型文件(最大1.5GB)运行良好。但是,对于大文件,返回的字节数与预期的计数不同。

特别是对于2.4GB的文件大小,将my count设置为2520133890,并且断言fprintf如下:

s = 2147479552 != count = 2520133890

使我感到困惑的是,我在64位系统上工作,因此sizeof(ssize_t) = 8

导致此失败的原因是什么?如何解决该问题,以便一次性读取整个文件?

c unix file-io posix

4
推荐指数
1
解决办法
932
查看次数

__asm volatile是什么("pause":::"memory"); 做?

我正在看一个开源C++项目,它具有以下代码结构:

while(true) {
  // Do something work

  if(some_condition_becomes_true)
     break;

  __asm volatile ("pause" ::: "memory");
}
Run Code Online (Sandbox Code Playgroud)

最后的陈述是做什么的?我理解这__asm意味着它是一个汇编指令,我发现了一些关于pause指令的帖子,说明该线程有效地暗示核心释放资源并给予其他线程更多资源(在超线程的上下文中).但:::做什么和memory做什么呢?

c++ parallel-processing x86 assembly inline-assembly

4
推荐指数
1
解决办法
1440
查看次数

无法将perl脚本的输出重定向到文件

即使这个问题听起来很烦人,但我仍然坚持这一点.所描述的问题发生在Ubuntu 14.04CentOS 6.3.

我正在使用一个perl脚本netbps,在答案中发布了一个名为RedGrittyBrick:by https://superuser.com/questions/356907/how-to-get-real-time-network-statistics-in-linux-with-kb- MB-字节格式和-为

上面的脚本基本上接受了tcpdump的输出(这里有一个我们不需要知道的命令)并以不同的格式表示它.请注意,脚本在流模式下执行此操作(即,输出是在运行中生成的).

因此,我的命令如下所示:

tcpdump -i eth0 -l -e -n "src portrange 22-233333 or dst portrange 22-23333" 2>&1 | ./netbps.prl

shell /控制台上生成的输出如下所示:

13:52:09      47.86 Bps
13:52:20     517.54 Bps
13:52:30     222.59 Bps
13:52:41    4111.77 Bps
Run Code Online (Sandbox Code Playgroud)

我试图将此输出捕获到文件,但是,我无法这样做.我尝试过以下方法:

  1. 重定向到文件:

tcpdump -i eth0 -l -e -n "src portrange 22-233333 or dst portrange 22-23333" 2>&1 | ./netbps.prl > out.out 2>&1

这会创建一个空out.out文件.shell /控制台上没有输出.

  1. 管和grep:

tcpdump -i eth0 -l -e -n "src portrange …

bash shell perl diamond-operator

2
推荐指数
1
解决办法
572
查看次数

C / C ++宏,用于中断或继续

我正在尝试编写一个简单的宏,该宏基于调用的条件breakcontinue在调用它的循环中的条件。下面是代码:

#include <iostream>

#define BC_IF_EVEN(BC) if(i % 2 == 0) BC

using namespace std;

int main() {
    int i = 0;
    while(i++ < 30) {
            if(i < 15)
                    BC_IF_EVEN(continue);
            else
                    BC_IF_EVEN(break);

            cout << i << " ";
    }
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找的输出是:1 3 5 7 9 11 13 15,但是上面的代码输出:1 3 5 7 9 11 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30因为 …

c c++ c-preprocessor preprocessor-directive

0
推荐指数
1
解决办法
691
查看次数