小编Nic*_*son的帖子

TCP SOCKET处理是否可继承?

在Windows上,子进程可以继承大多数句柄.期望TCP套接字也可以继承.但是,当安装某些分层服务提供程序时,这不会按预期工作(来自Symantec的A/V产品,例如来自Symantec的PCTools,会导致我们的客户应用程序出现问题).

微软构建WinSock的方式,我们是否应该能够正确地继承SOCKET?

winapi winsock

6
推荐指数
1
解决办法
2551
查看次数

你怎么知道主要是退出了?

在C和C++,atexit函数的调用任一内部exit或之后main返回(其名义上调用exit:__libc_start_main(argc,argv) { __libc_constructors(); exit(main(argc,argv)); }).

有没有办法找出我们是否在退出序列内?注册了C++全局和局部静态的析构函数atexit,因此您的代码在此阶段肯定可以调用.(有趣的是,在某些平台上,如果你试图在里面创建一个C++本地静态对象exit,它会在退出锁上死锁!)

到目前为止,我最好的尝试如下:

static bool mainExited = false;
static void watchMain() {
  static struct MainWatcher {
    ~MainWatcher() { mainExited = true; }
  } watcher;
}
Run Code Online (Sandbox Code Playgroud)

当您想要注意退出时,您可以随时调用watchMain()mainExited告诉您退出序列是否已经开始 - 当然,如果稍后初始化的本地静态对象正在破坏!

可以改进技术来纠正这个问题,还是有另一种方法可行?

除了 - 用例!

虽然从语言的角度来看这个问题很有意思(有点像"我可以判断我是否在一个catch区块内吗?"),但概述一个用例也很有用.我在编写一些代码时遇到了这个问题,这些代码将在加载JVM和没有加载JVM的情况下运行(直接调用或通过JNI调用).JVM退出后,将atexit调用C 处理程序,JNI_OnUnload如果类加载器未卸载JNI共享库,则不会调用它们.

由于共享库的对象可以通过显式销毁(并且应该释放它们的资源)来破坏,并且通过在退出时清理,我需要安全地区分这两种情况,因为当我们到达退出代码时JVM就消失了!基本上没有一点嗅探,我无法在JNI规范/文档中找到共享库来了解JVM是否仍然存在,如果它已经消失,那么尝试释放我们的引用肯定是错误的到Java对象.

c++ static posix program-entry-point exit

6
推荐指数
1
解决办法
388
查看次数

如何编写响应`Thread.interrupt()`的本机代码?

在Java中,所有标准的阻塞方法都可以通过调用来中断Thread.interrupt(),但是如果我们有Java绑定包装一个自己进行I/O的本机库呢?那么本机代码应该如何挂钩到线程并响应调用Thread.interrupt()

java java-native-interface multithreading interrupted-exception

6
推荐指数
1
解决办法
1022
查看次数

在什么范围的机器上的二进制兼容性?

我在C中编写了一个简单的程序,并在Ubuntu上使用GCC编译它.这个文件会在另一台机器上运行吗?

  • 输出二进制文件的内容及其外部依赖项是什么?
  • 它可以在其他Linux发行版上运行,在什么情况下运行?
  • 它可以在其他操作系统上运行吗?

c compiler-construction ubuntu shared-libraries

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

SecurID代理文档在哪里?

显然,在安装了"RSA Authentication Agent"的Windows机器上,可以利用它来提供身份验证服务.似乎有一些文档/ SDK用于执行此操作.似乎可以静态链接此功能,或通过调用从"aceclnt.dll"导出的某些函数动态加载它.

但是,由于RSA的网站已移至emc.com,因此旧网站的所有链接均已失效.我无法在新网站上找到任何文档.请帮我google吧!

我们可以通过PAM在UNIX/Linux上的应用程序中轻松使用SecurID身份验证.它只在Windows上,我们需要使用一些特殊的SecurID API来查询是否接受/拒绝凭据.

windows securid two-factor-authentication

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

dup2真的可以返回EINTR吗?

在规范和两个实现中:

  • 根据 POSIX,dup2()可能会返回 EINTR。
  • Linux 手册页将其列为允许的。
  • FreeBSD 手册页表明它从未返回过。这是一个错误吗 - 因为它的关闭实现可以 EINTR (至少对于 TCP linger 如果没有其他的话)。

实际上,Linux 可以返回 EINTR 吗dup2()?如果是这样的话,大概是因为close()决定等待并且信号到达(TCP 延迟或狡猾的文件系统驱动程序在关闭时尝试同步)。

实际上,FreeBSD 能保证不返回 EINTR 吗dup2()?在这种情况下,它一定不会等待旧 fd 上的任何未完成的操作,而是简单地取消链接该 fd。

当POSIXdup2()指的是“关闭”(不是斜体)而不是指实际的函数时,它意味着什么close()- 我们是否理解它只是以非正式的方式谈论“关闭”它(取消文件描述符的链接),或者它是试图说效果应该就像close()首先调用该函数然后dup2()以原子方式调用一样。

如果fildes2已经是一个有效的打开文件描述符,则应首先关闭它,除非fildes等于fildes2,在这种情况下,dup2()应返回fildes2而不关闭它。

如果dup2() 必须关闭、等待,然后自动复制,这对于实现者来说将是一场噩梦!这比惨败的 EINTR 还要糟糕得多close()。胆怯的 POSIX 甚至没有说在 EINTR 的情况下是否发生了重复......

linux posix freebsd file-descriptor language-lawyer

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

这是一种使堆栈缓冲区为八字节对齐的可移植方式吗?

struct {
  uint64_t a; char z[120];
} b;

...

struct buffer_with_alignment_requirement* c = (struct buffer_w*)&b;
c->start_using_it;
Run Code Online (Sandbox Code Playgroud)

如果没有第一个成员a,我们可能会在访问缓冲区中的字段时崩溃.简单地添加这样的成员以强制整个结构的对齐是否足够严格,是否可移植且正确?

这不是关于指针别名的问题,只是关于b堆栈上的地址是否总是八字节对齐.

c

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

Facebook API:Post类型上未记录的'properties'属性

官方API文档太稀疏了(这里).至少有一个未列出的属性,您可以在发帖时非常有用.这是一个自我回答的问题,用于记录"属性"字段,因为我无法找到有关SO的所有信息.

facebook facebook-graph-api

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

我该如何为遗传算法生成随机数?

我正在写一个遗传算法来解决Master Mind游戏.我已经对最佳方法进行了大量研究,拥有多样化的人口非常重要.我正在尝试确定如何在C++中获得非常好的随机数.我已经srand(time(NULL))在我的程序开始时设置种子然后我只是使用了rand().我想知道的是这是多么随机?它不错吗?是否还有其他更好的随机数库?

我知道数论和随机性是一个非常复杂的主题; 在编写自己的版本时,你有什么指针rand()吗?

c++ random number-theory genetic-algorithm

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

如何在Windows上创建在暂停期间不打勾的单调时钟?

我正在寻找一种获得保证单调时钟的方法,它可以排除暂停期间所花费的时间,就像POSIX一样CLOCK_MONOTONIC.

需要Windows 7(或更高版本)的解决方案是可接受的.

这是一个不起作用的例子:

LONGLONG suspendTime, uiTime1, uiTime2;
do {
  QueryUnbiasedInterruptTime((ULONGLONG*)&uiTime1);
  suspendTime = GetTickCount64()*10000 - uiTime1;
  QueryUnbiasedInterruptTime((ULONGLONG*)&uiTime2);
} while (uiTime1 != uiTime2);
static LARGE_INTEGER firstSuspend = suspendTime;
static LARGE_INTERER lastSuspend = suspendTime;
assert(suspendTime > lastSuspend);
lastSuspend = suspendTime;

LARGE_INTEGER now;
QueryPerformanceCounter(&now);
static LONGLONG firstQpc = now.QuadPart;

return (now.QuadPart - firstQpc)*qpcFreqNumer/qpcFreqDenom -
    (suspendTime - firstSuspend);
Run Code Online (Sandbox Code Playgroud)

这个(我的第一次尝试)的问题是GetTickCount每15ms只会打勾,而且QueryUnbiasedInterruptTime似乎更频繁地打勾,所以我的方法偶尔会观察暂停时间稍微回过头来.

我也尝试过使用CallNtPowerInformation,但目前尚不清楚如何使用这些值来获得一个不错的,无竞争的暂停时间度量.

time winapi

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

如何在bash中编写看门狗守护进程?

我想要一种在shell脚本中编写守护进程的方法,该脚本在循环中运行另一个应用程序,如果它死了则重新启动它.

  • ./myscript.sh从SSH会话运行时,它将启动守护程序的新实例,除非该守护程序已在运行.
  • 当SSH会话结束时,守护程序将保持不变.
  • 应该有一个参数(./myscript -stop)可以杀死任何现有的守护进程.

(关于编辑的注意事项 - 原始问题指出nohup并且可能不使用类似工具.这个人工要求是一个"XY问题",并且接受的答案实际上使用了OP声称无法使用的所有工具.)

bash shell daemon nohup

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

没有循环的进度条

我想我已经在整个互联网上搜索了一个简单的进度条,但我找不到一个在函数/子完成后取得进展的东西.

我将在下面的代码中演示我想要的内容.我对VBA的了解是基本的,也是这样的.

我有一个表单,有一个按钮,当我点击按钮时,他应该执行这个:

Sub program()

progressbarform.show

Call function1
"set progressbar to 20%"

Call funcion2
"set progressbar to 40%"

Call function3
"set progressbar to 100%"

"Unload progressbar form"

End Sub
Run Code Online (Sandbox Code Playgroud)

excel vba

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