小编Nic*_*son的帖子

迭代器 - >第二个意思是什么?

在C++中,a的类型是std::map<>::iterator什么?

我们知道it类型的对象std::map<A,B>::iterator有一个重载operator ->,它返回一个std::pair<A,B>*,并且std::pair<>有一个firstsecond成员.

但是,这两个成员对应的是什么,为什么我们必须访问存储在地图中的值it->second

c++ iterator stl

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

TCP和UDP套接字可以使用相同的端口吗?

首先,在同一台服务器上同时使用UDP和TCP有什么问题吗?

其次,我可以使用相同的端口号吗?

sockets networking udp tcp

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

为什么stdout在重定向到文件时需要显式刷新?

行为printf()似乎取决于的位置stdout.

  1. 如果stdout发送到控制台,则printf()行缓冲并在打印换行符后刷新.
  2. 如果stdout被重定向到文件,则除非fflush()被调用,否则不刷新缓冲区.
  3. 此外,如果printf()stdout重定向到文件之前使用,则后续写入(对文件)是行缓冲的并在换行后刷新.

何时进行stdout行缓冲,什么时候fflush()需要调用?

最简单的例子:

void RedirectStdout2File(const char* log_path) {
    int fd = open(log_path, O_RDWR|O_APPEND|O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO);
    dup2(fd,STDOUT_FILENO);
    if (fd != STDOUT_FILENO) close(fd);
}

int main_1(int argc, char* argv[]) {
    /* Case 1: stdout is line-buffered when run from console */
    printf("No redirect; printed immediately\n");
    sleep(10);
}

int main_2a(int argc, char* argv[]) {
    /* Case 2a: stdout is not line-buffered when …
Run Code Online (Sandbox Code Playgroud)

c linux stdout

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

libgdx阶段和屏幕之间的区别

我正在制作游戏,我在教程中看到一些人使用Stage类,而其他人使用Screen类,但我无法弄清楚差异.

android game-engine libgdx

18
推荐指数
1
解决办法
8233
查看次数

如何在不溢出的情况下使用mach_absolute_time?

在Darwin上,POSIX标准clock_gettime(CLOCK_MONOTONIC)计时器不可用.相反,最高分辨率的单调计时器是通过mach_absolute_time函数获得的mach/mach_time.h.

返回的结果可能是来自处理器的未调整的滴答计数,在这种情况下,时间单位可能是奇怪的倍数.例如,在具有33MHz滴答计数的CPU上,Darwin返回1000000000/33333335作为返回结果的确切单位(即,乘以该mach_absolute_time分数以获得纳秒值).

我们通常希望将精确刻度转换为"标准"(十进制)单位,但不幸的是,即使在64位算术中,绝对时间乘以分数也会溢出.这是苹果公司唯一的文件归属mach_absolute_time于(技术问答QA1398).1

我该如何编写正确使用的函数mach_absolute_time


  1. 请注意,这不是一个理论问题:QA1398中的示例代码完全无法在基于PowerPC的Mac上运行.在Intel Mac上,mach_timebase_info始终返回1/1作为缩放因子,因为CPU的原始滴答计数不可靠(动态速度步进),因此API会为您进行缩放.在PowerPC Mac上,mach_timebase_info返回1000000000/33333335或1000000000/25000000,因此Apple提供的代码每隔几分钟就会溢出一次.哎呀.

macos x86 posix powerpc darwin

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

TCP SOCKET句柄可以设置为不可继承吗?

Windows句柄可以设置为可继承或不可继承,以控制子进程是否将接收它们(当bInheritHandles处于CreateProcessTRUE状态时).但是,使用SetHandleInformation标记SOCKET不可继承并不总是有效.特别是,当安装某些分层服务提供程序(LSP)时,子进程无论如何都会继承句柄.这特别容易导致监听套接字的错误.(但是,由于另一个问题,如果孩子尝试使用套接字,它将无法使用!真正的捕获22!)

重现步骤

  1. 创建例如监听套接字.使用标记为不可继承SetHandleInformation.
  2. 产生一个孩子,bInheritHandles真实.
  3. 关闭父级中的套接字,并尝试重新绑定到该端口.

当安装(非IFS)LSP时,例如.PCTools Internet Security,监听套接字将在子进程中打开(可见netstat),尽管SetHandleInformation在创建子进程之前在套接字上调用以禁用继承.

有关替代方案,请参阅KB2398202中的(简要)步骤.

有哪些变通方法?

winapi winsock

9
推荐指数
1
解决办法
2822
查看次数

当TCP keep-alive中断连接时,我会得到什么套接字错误?

我有一组带有保持活动的TCP套接字(间隔1分钟),由select(2) 循环控制(选择读取).

  • select(2)如果集合中的一个套接字发生了保持活动超时,则会返回错误吗?
  • 哪个错误会read(2)返回?

c sockets linux tcp

9
推荐指数
1
解决办法
4789
查看次数

connect()与unix-domain套接字和完整的待办事项

当STREAM unix-domain套接字的监听积压已满时,connect(2)在大多数具有ECONNREFUSED的系统上都会失败.它最好返回EAGAIN.

原因在于能够区分死套接字的两种情况(文件系统中存在节点,但是没有进程监听)以及完全积压的情况非常有用.我在移植某些具有一些代码来清理死套接字的Linux软件时遇到了这个问题,但是如果代码可以通过垃圾邮件来欺骗它们来填补他们的积压,那么这就是一个安全漏洞.

只有Linux返回EAGAIN; AIX,Solaris和Darwin遵循BSD行为(仅对每个行为进行测试).

POSIX没有将EAGAIN列为connect()(链接)的可能返回代码,因此这里可能存在一些合规性问题.

什么是让每个人都能与Linux一致改变的最佳途径?我可以向Oracle,Apple,FreeBSD PR提交一份错误报告,并在每个组织的邮件列表上进行讨论.或者我应该在标准组织(奥斯汀组)中纠缠某人?即使优势很明显,尝试让每个人都在这里改变是否明智?

sockets linux macos posix solaris

9
推荐指数
1
解决办法
1491
查看次数

尽管有无限的ulimit,为什么非常大的堆栈分配会失败?

以下静态分配给出了分段错误

double U[100][2048][2048];
Run Code Online (Sandbox Code Playgroud)

但是下面的动态分配很顺利

double ***U = (double ***)malloc(100 * sizeof(double **));

for(i=0;i<100;i++)
{
    U[i] = (double **)malloc(2048 * sizeof(double *));
    for(j=0;j<2048;j++)
    {
        U[i][j] = (double *)malloc(2048*sizeof(double));
    }
}
Run Code Online (Sandbox Code Playgroud)

ulimit在linux中设置为无限制.

有人能给我一些关于发生什么的暗示吗?

c linux memory-management

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

TCP SOCKET处理是否可继承?

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

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

winapi winsock

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