是否可以以编程方式捕获 Linux 上已运行进程的标准输出(和标准输入)?(也许将其重定向到管道?)
如果该解决方案能够在用户空间中运行(意味着不需要 root 权限),那就最好了。
我已经看到一个显然使用 gdb 的答案,但我想在没有 gdb 的情况下完成它。
编辑:澄清一下:不,我无权访问代码,我也不想更改二进制文件,我希望解决方案能够在单独的进程中工作。无论如何,目标进程已经在运行。
我最近发现了git fsck,但链接的答案并git help fsck列出了各种替代选项,其中一些似乎与未经训练的眼睛相同.为了能够很好地使用该工具,我想了解以下命令之间的区别是什么?
git fsck --danglinggit fsck --unreachablegit fsck --lost-found此外,可以/应该在某些组合中一起使用,还是更好?
(作为旁注,我特别感兴趣的是使用它git log -G$REGEX $(git fsck --something),尽可能地扩大网络,我希望找到一些我记得在某些时候写过的东西,但是我找不到它git log -G$REGEX -a.)
我想构建一组由函数变量参数化的相关函数(函数封装坐标转换).即,对于某些变量:
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!
在如下所示的模板中,我希望调用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++)两种风格之间的if-else写的任何性能差别,如下(逻辑上等同代码)所示的likely1 == likely2 == true路径(likely1和likely2在这里是指作为占位符的一些更详细的情况)?
// 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++ ×2
c ×1
generics ×1
git ×1
if-statement ×1
linux ×1
ocaml ×1
performance ×1
templates ×1
traits ×1