小编aka*_*vel的帖子

以编程方式重定向正在运行的进程的标准输出?

是否可以以编程方式捕获 Linux 上已运行进程的标准输出(和标准输入)?(也许将其重定向到管道?)

如果该解决方案能够在用户空间中运行(意味着不需要 root 权限),那就最好了。

我已经看到一个显然使用 gdb 的答案,但我想在没有 gdb 的情况下完成它。

编辑:澄清一下:不,我无权访问代码,我也不想更改二进制文件,我希望解决方案能够在单独的进程中工作。无论如何,目标进程已经在运行。

c linux

3
推荐指数
1
解决办法
3055
查看次数

git fsck:如何--dangling与--unreachable vs. --lost-found有何不同?

我最近发现了git fsck,但链接的答案并git help fsck列出了各种替代选项,其中一些似乎与未经训练的眼睛相同.为了能够很好地使用该工具,我想了解以下命令之间的区别是什么?

  • git fsck --dangling
  • git fsck --unreachable
  • git fsck --lost-found

此外,可以/应该在某些组合中一起使用,还是更好?

(作为旁注,我特别感兴趣的是使用它git log -G$REGEX $(git fsck --something),尽可能地扩大网络,我希望找到一些我记得在某些时候写过的东西,但是我找不到它git log -G$REGEX -a.)

git

3
推荐指数
1
解决办法
2113
查看次数

由值参数化的函数集

我想构建一组由函数变量参数化的相关函数(函数封装坐标转换).即,对于某些变量:

val transformation : float * float -> float * float
Run Code Online (Sandbox Code Playgroud)

我想在运行时基于此转换构建一组函数.现在,在"主流"命令式语言中,我通常会使用方法来寻找某种对象.我知道这些在OCaml中也是可能的,但我也读过在OCaml中,通常最好使用模块(例如,这里是一个仿函数,我猜).

我应该使用方法模块(通过仿函数)构建对象吗?如果是后者,我应该如何编码呢?我打算用对象,因为我想我知道如何写它; 对于模块,我很困惑,不确定我想要的是否可能.但是如果你可以帮助我,我会喜欢学习"更好的方法".我想要的东西:

val make_set_of_functions : (float * float -> float * float) -> 'magic
Run Code Online (Sandbox Code Playgroud)

'magic模块(或对象)在哪里.

TIA!

ocaml

3
推荐指数
1
解决办法
75
查看次数

如何从C++模板中的方法类型推导出类类型?

在如下所示的模板中,我希望调用Run(&Base::foo)成功,而无需将Base类型命名两次(如编译Run<Base>(&Base::foo)调用中所做的那样).我可以吗?可能没有添加大量的Boost标头?

使用提供的代码,我得到一个错误:

prog.cpp:26: error: no matching function for call to ‘Run(bool (Base::*)())’
Run Code Online (Sandbox Code Playgroud)

(你可以在http://ideone.com/8NZkq上摆弄这个片段):

#include <iostream>

class Base {
public:
  bool foo() { return true; }
};

Base* x;

template<typename T>
struct Traits {
  typedef bool (T::*BoolMethodPtr)();
};

template<typename T>
void Run(typename Traits<T>::BoolMethodPtr check) {
  T* y = dynamic_cast<T*>(x);
  std::cout << (y->*check)();
}

int main() {
  Base y;
  x = &y;
  Run<Base>(&Base::foo);
  Run(&Base::foo); // why error?
}
Run Code Online (Sandbox Code Playgroud)

c++ generics templates traits

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

在C++中"如果错误然后快速失败"的性能损失?

有没有(用C++)两种风格之间的if-else写的任何性能差别,如下(逻辑上等同代码)所示的likely1 == likely2 == true路径(likely1likely2在这里是指作为占位符的一些更详细的情况)?

// Case (1):
if (likely1) {
  Foo();
  if (likely2) {
    Bar();
  } else {
    Alarm(2);
  }
} else {
  Alarm(1);
}
Run Code Online (Sandbox Code Playgroud)

// Case (2):
if (!likely1) {
  Alarm(1);
  return;
}
Foo();
if (!likely2) {
  Alarm(2);
  return;
}
Bar();
Run Code Online (Sandbox Code Playgroud)

我非常感谢有关尽可能多的编译器和平台的信息(但突出显示了gcc/x86).

请注意我对这两种风格的可读性意见感兴趣,也没有任何"过早优化"声明.

编辑:换句话说,我想询问这两种样式是否在某些时候被编译器认为是完全100%等效/透明的(例如,在特定编译器中的某些点上逐位等效的AST) ,如果没有,那么有什么区别?对于任何(对"现代"和gcc)编译器的偏好,你知道.

而且,为了更清楚,我也真的不觉得它会给予我很大的性能提升,而且它通常会过早的优化,但我感兴趣,是否多少可以提高/降低任何东西?

c++ performance if-statement

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

标签 统计

c++ ×2

c ×1

generics ×1

git ×1

if-statement ×1

linux ×1

ocaml ×1

performance ×1

templates ×1

traits ×1