小编rom*_*m1v的帖子

是否有shell命令来延迟缓冲区?

我正在寻找一个shell命令X,例如,当我执行时:

command_a | X 5000 | command_b
Run Code Online (Sandbox Code Playgroud)

所述stdoutcommand_a被写入stdincommand_b(至少)5-秒钟后.

一种延迟缓冲.

据我所知,buffer/ mbuffer可以以恒定速率写入(每秒固定的字节数).相反,我想要一个恒定的时间延迟(t = 0是X读取command_a输出块时,在t = 5000时必须将此块写入command_b).

[编辑]我已经实现了它:https://github.com/rom1v/delay

bash shell

10
推荐指数
2
解决办法
2626
查看次数

`std :: less`是如何工作的?

指针关系运算符没有定义总顺序(C++ 11标准的第5.9节):

如果两个指针pq相同类型的点不属于相同对象的成员或相同数组的元素不同的对象或不同的功能,或者如果只有它们中的一个为空,结果p<q,p>q,p<=q,和p>=q未指定.

std :: less文档说:

std::less任何指针类型的部分特化都会产生一个总订单,即使内置的operator<没有.

如何从部分订单中获得此总订单?


我无法通过观察来回答这个问题/usr/include/c++/4.9/bits/stl_function.hstruct less定义:

  template<typename _Tp = void>
    struct less;

  template<typename _Tp>
    struct less : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x < __y; }
    };

  template<>
    struct less<void>
    {
      template <typename _Tp, typename _Up>
        auto
        operator()(_Tp&& __t, _Up&& __u) const
        noexcept(noexcept(std::forward<_Tp>(__t) < …
Run Code Online (Sandbox Code Playgroud)

c++ stl relational partial-ordering c++11

8
推荐指数
1
解决办法
1496
查看次数

为什么SOCKS5需要通过UDP中继UDP?

RFC1928描述的SOCKS5协议提供对UDP的支持.

总而言之,希望通过SOCKS5服务器中继UDP数据包的客户端必须至少:

  • 打开与SOCKS5服务器的TCP连接;
  • 发送UDP ASSOCIATE请求(参见第4节);
  • 从服务器接收必须发送UDP数据包的地址和端口;
  • 将数据报(UDP)发送到该地址,并使用一些标头封装(参见第7节).

以下是第6节中的一些相关引文:

当UDP ASSOCIATE请求到达的TCP连接终止时,UDP关联终止.

在对UDP ASSOCIATE请求的回复中,BND.PORT和BND.ADDR字段指示客户端必须发送要中继的UDP请求消息的端口号/地址.

第7:

基于UDP的客户端必须在回复UDP ASSOCIATE请求时将其数据报发送到由BND.PORT指示的UDP端口的UDP中继服务器.

为什么这么复杂?为什么不在预先存在的TCP连接中发送UDP数据包?

编辑:为了澄清,我期望SOCKS代理通过TCP流接收UDP数据包,然后使用实际的UDP将它们传输到目标.然后从目标接收UDP数据包并将其发送回TCP流.


这是一些背景.

我的目标是实现反向网络共享,以便Android设备可以使用其插入的计算机的Internet连接,而无需在设备和计算机上进行root访问(SimpleRT可以工作,但需要在计算机上进行root访问).

我的第一个想法是ssh -D在计算机上启动一个简单的SOCKS5服务器,这样我只需要实现客户端.adb由于... 提供的远程端口转发,数据包将从设备传输到计算机adb reverse.

不幸的是,OpenSSH SOCKS服务器不支持UDP.但这只是实施的限制,我本可以使用另一个SOCKS服务器.

但是,adb reverse也不支持UDP转发.

因此我的问题关于SOCKS5协议.

我目前正在编写一个PoC,它通过TCP实现我自己的(简单)协议,它能够中继UDP数据包,但我很失望不能使用标准协议(并从现有实现中获益).

networking udp tcp rfc socks

7
推荐指数
1
解决办法
7196
查看次数

在MSYS2 / MinGW中执行脚本

在Windows上,如果我启动c:\msys64\mingw64.exe,它将打开一个外壳程序,可以在其中构建我的项目,例如,调用releasebash脚本(为简化起见)。一切正常。

现在,我想直接在没有交互的情况下执行release脚本mingw64

我试过了:

c:\msys64\mingw64.exe /c/the/full/path/release
Run Code Online (Sandbox Code Playgroud)

窗口打开和关闭,它不起作用。

我试图bash直接使用,但似乎环境设置不正确:

> c:\msys64\usr\bin\bash -c ls
/usr/bin/bash: ls: command not found

> c:\msys64\usr\bin\bash -c /bin/ls
... it works ...
Run Code Online (Sandbox Code Playgroud)

因此,很明显,环境与execute c:\msys64\mingw64.exe然后call 时的环境不同ls

如何执行我的release脚本,就像我在shell中一样mingw64.exe

windows mingw-w64 msys2

7
推荐指数
3
解决办法
4425
查看次数

取消 pthread 和 printf 行为

下面是 pthread 取消的代码示例:

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void *my_routine(void *arg) {
  int i;
  for (i = 0; i < 10; i++) {
    printf("%d\n", i);
  }
  return NULL;
}

int main(void) {
  pthread_t thread;
  if (pthread_create(&thread, NULL, my_routine, NULL)) {
    fprintf(stderr, "Cannot create pthread\n");
    return 1;
  }
  usleep(20);
  pthread_cancel(thread);
  pthread_join(thread, NULL);
  //fflush(stdout);
  sleep(1);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我编译:

gcc -pthread -Wall threadtest.c -o threadtest
Run Code Online (Sandbox Code Playgroud)

执行时,有时会在 后 sleep(1)打印一个附加数字。

有时这个数字是重复的:

0
1
2
3
4
4  // printed after sleep(1) …
Run Code Online (Sandbox Code Playgroud)

c printf pthreads cancellation

5
推荐指数
1
解决办法
1204
查看次数

在不安全的代码中,可变引用的别名是否正确?

不安全的代码中,只要它们不用于写入相同的索引,对同一个数组有几个可变引用(而不是指针)是否正确?

上下文

我想产生几个(不同的)底层数组的可变视图,我可以从不同的线程修改.

如果不相交的部分是连续的,那么通过调用split_at_mut切片这是微不足道的:

let mut v = [1, 2, 3, 4];
{
    let (left, right) = v.split_at_mut(2);
    left[0] = 5;
    right[0] = 6;
}
assert!(v == [5, 2, 6, 4]);
Run Code Online (Sandbox Code Playgroud)

但我也希望揭露不连续的不相交部分.为简单起见,假设我们想为偶数索引检索可变"视图",为奇数索引检索另一个可变"视图".

相反split_at_mut(),我们无法检索两个可变引用(我们想要一个安全的抽象!),所以我们使用两个结构实例,只暴露偶数(相应的奇数)索引的可变访问:

let data = &mut [0i32; 11];
let (mut even, mut odd) = split_fields(data);
// …
Run Code Online (Sandbox Code Playgroud)

使用一些不安全的代码,很容易获得这样一个安全的抽象.这是一个可能的实现:

use std::marker::PhantomData;

struct SliceField<'a> {
    ptr: *mut i32,
    len: usize,
    field: usize,
    marker: PhantomData<&'a mut i32>,
}

impl SliceField<'_> {
    fn …
Run Code Online (Sandbox Code Playgroud)

unsafe mutable pointer-aliasing rust

5
推荐指数
1
解决办法
217
查看次数

C struct:没有填充的连续字段?

any_t是任何类型的(int,struct something,...).

考虑这个结构:

struct my_struct {
    any_t val,
    any_t array[10]
}
Run Code Online (Sandbox Code Playgroud)

如果我定义一个变量v:

struct my_struct v;
Run Code Online (Sandbox Code Playgroud)

&v.val作为11 any_t项的数组使用是否安全?

any_t *p = &v.val;
f(p[0]);
f(p[5]);
f(p[10]);
Run Code Online (Sandbox Code Playgroud)

是否保证不会在val和之间添加填充array

c struct padding

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

在Android AOSP中包括预构建的共享库

我想使用libmylib.so一些AOSP代码中的预构建共享库(我们称之为),例如在folder中framework/av/media/libmedia

由于我的目标是Nexus 7,因此我创建了一个新文件夹device/asus/flo/mylib,其中放置了2个文件:

  • libmylib.so
  • Android.mk

我的第一次尝试是使用PREBUILT_SHARED_LIBRARYAndroid.mk如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libmylib
LOCAL_SRC_FILES := libmylib.so
include $(PREBUILT_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

然后,我在libmedia模块中添加了依赖项(在中framework/av/media/libmedia/Android.mk,我添加libmylib到了LOCAL_SHARED_LIBRARIES列表中)。

不幸的是,构建(lunch aosp_flo-eng && make -j4)失败:

*** No rule to make target `out/target/product/flo/obj/SHARED_LIBRARIES/libmylib_intermediates/export_includes’, needed by `out/target/product/flo/obj/SHARED_LIBRARIES/libmedia_intermediates/import_includes’. Stop.
Run Code Online (Sandbox Code Playgroud)

因此,我替换PREBUILT_SHARED_LIBRARYBUILD_PREBUILT(我不太了解其中的区别):

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libmylib
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_SUFFIX := .so
LOCAL_SRC_FILES := libmylib.so …
Run Code Online (Sandbox Code Playgroud)

android android-source

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