小编Joh*_*Doe的帖子

C - 分号的返回值是多少?

我只是好奇以下的例子

#include<stdio.h>
int test();
int test(){
     //    int a = 5;
     //    int b = a+1;
     return ;
}
int main(){
     printf("%u\n",test());
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用'gcc -Wall -o semicolon semicolon.c'编译它来创建一个可执行文件和'gcc -Wall -S semicolon.c'来获取汇编代码,它是:

    .file   "semicolon.c"
    .text
.globl test
    .type   test, @function
test:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $4, %esp
    leave
    ret
    .size   test, .-test
    .section        .rodata
 .LC0:
    .string "%u\n"
    .text
 .globl main
    .type   main, @function
 main:
    leal    4(%esp), %ecx
    andl    $-16, %esp
    pushl   -4(%ecx)
    pushl   %ebp
    movl    %esp, %ebp …
Run Code Online (Sandbox Code Playgroud)

c

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

羊群锁定顺序?

即时通讯使用http://www.tuxradar.com/practicalphp/8/11/0 这样的简单测试脚本

<?php
$fp = fopen("foo.txt", "w");
if (flock($fp, LOCK_EX)) {
    print "Got lock!\n";
    sleep(10);
    flock($fp, LOCK_UN);
}
Run Code Online (Sandbox Code Playgroud)

我打开了5个shell并一个接一个地执行脚本脚本阻塞,直到锁定被释放,然后在释放后继续

即时通讯不是真的在php中填充,但我的问题是:谁知道flock()的获取顺序?

e.g.
t0: process 1 lock's
t1: process 2 try_lock < blocking
t2: process 3 try_lock < blocking
t3: process 1 releases lock
t4: ?? which process get's the lock?
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的确定性顺序,如队列或内核"只是"通过"更高级的规则"选择一个?

linux flock

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

gcc / g ++参数顺序

我刚刚在新的ubuntu 12.10服务器上编译了chironfs,并收到以下错误:

gcc  -Wall -W -Wmissing-prototypes -g -O2 -DFUSE_USE_VERSION=25 -D_FILE_OFFSET_BITS=64 -I/usr/local/include -g -O2 -lm -lfuse  -o chironfs chironfs.o chiron-conf.o chirondbg.o chironfn.o  
chironfs.o: In function `chiron_init':
/root/chironfs-1.1.1/src/chironfs.c:2000: undefined reference to `pthread_create'
chironfs.o: In function `get_rights_by_name':
/root/chironfs-1.1.1/src/chironfs.c:452: undefined reference to `fuse_get_context'
Run Code Online (Sandbox Code Playgroud)

pthread错误告诉我-lpthread丢失,但是保险丝错误有点奇怪,因为正在使用-lfuse

我在这里找到了建议将库放在目标文件之后的解决方案

所以我删除了-lfuse并在行的最后添加了-lfuse -lpthread

现在它可以编译而没有错误,看来这就是应该的样子:目标文件后的库

我的问题是:为什么参数顺序与gcc / ld有关?我tough gcc像其他所有应用程序一样解析参数,并且可以将必要的参数转发给ld或此类

一般而言:任何人都知道gcc参数排序的事实或提示,也许还有些关于为什么需要这种方式的背景信息?

谢谢

parameters linker gcc

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

在哪些条件下,Webrtc PeerConnection如何在没有TURN服务器的情况下工作?

阅读有关Webrtc的信息我感觉"它会大大降低服务器带宽使用率",除了"一些角落企业防火墙案例",其中一个需要TURN服务器来传递对等体之间的整个流量.

例如,altough没有的WebRTC相关,但这个想法是相似的,对维基百科文章的chatroulette声明:本网站使用的Adobe Flash显示视频和访问用户的摄像头.Flash的点对点网络功能(通过RTMFP)允许几乎所有视频和音频流直接在用户计算机之间传输,而无需使用服务器带宽.但是,某些路由器组合不允许UDP流量在它们之间流动,然后有必要回退到RTMP.

Webrtc上的类似文章也集中在"是的,防火墙可能存在问题,所以你需要一个TURN服务器,但忽略这一点,看看我真棒的PeerConnection javascript代码".

我不明白的是:

两个对等体之间的连接需要打开服务器套接字,以便对等体可以连接到它.甚至UDP也需要udp服务器套接字的概念.由于几乎所有非服务器互联网连接的对等设备都支持某种路由器.例如,每个智能手机都使用wifi路由器,台式PC使用服务提供商的路由器,......它不可能连接到智能手机(浏览器webrtc服务器套接字)上托管的服务器套接字或路由器/防火墙的桌面原因.

因此,我的理解实际上没有两个需要通过互联网发送流量的同行能够使用直接的P2P连接,对吧?因此,使用Webrtc的唯一有用的案例是在类似局域网的环境中,对吧?此外,在像基于webrtc的chatroulette的视频聊天服务的情况下,需要使用一堆TURN服务器来中继几乎所有流量.这使得Webrtc在托管我自己的解决方案方面与服务器带宽同样昂贵.

所以我的问题是:我是对的吗?如果不是什么技术细节允许在没有TURN服务器的情况下使用PeerConnection但是由互联网分开的两个节点?如何在第4层建立TCP/UDP传输层的连接?它是否使用UDP和所有wifi路由器允许托管UDP服务器套接字等?这对NAT和安全性没有多大意义.

更新1: 进一步挖掘我发现"对称nat"意味着什么以及它与企业有什么关系:在大多数企业中,似乎连接到互联网的设备具有对称的nat实现.这意味着将内部"internal-ip:internal-port"元组映射到"internet-ip:internet-port"的路由表也存储"destination-ip:destination-port".所以这样的路由/ nat为每个(tcp?)连接存储一个表,其中包含6列"internal-ip:internal-port:internet-ip:internet-port:destination-ip:destination-port".这意味着没有其他人,但目的地被允许与internal-ip:internal-port通信.而非企业路由器似乎只存储"internal-ip:internal-port:internet-ip:internet-port"组合.这也意味着"在防火墙上挖洞".

networking webrtc

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

自动测试生成?

目前我正在为报告功能编写测试,项目获得的功能越多,需要编写更多报告

在我的案例报告中得到一些"搜索"参数和限制,如行数等

现在我的问题:任何人都知道如何使用phpunit为一个具有众所周知的可能参数的函数自动生成测试用例?

我读了一些像其他语言的快速检查工具,但是为PHP存在自动测试生成吗?或者有人建议如何自动创建测试?

谢谢

php phpunit unit-testing code-generation

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

postgresql:在动态命令中使用 NEW.* 执行 EXECUTE

我尝试为 postgresql 8.3 创建一个 plpgsql 触发器,它在通过 id 列插入之前自动对表进行分区

如果目标表不存在,它将被创建,然后插入到那里

所以我用这样的新表名创建了插入语句

exec_insert := 'INSERT INTO '||TG_TABLE_SCHEMA||'.'||TG_RELNAME||'_'||destinationid||' VALUES('||NEW.*||')';
EXECUTE exec_insert;
Run Code Online (Sandbox Code Playgroud)

导致错误:

ERROR:  NEW used in query that is not in a rule
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 甚至可以在 EXECUTE 中使用 NEW 还是语句中有错误?
  2. 如果这是不可能的,有人知道如何从 NEW 中获取值,以便我可以在语句中使用它们吗?我唯一想到的是使用 information_schema 检索主表的列名,然后尝试动态访问 NEW 的值 - 我也不知道如何:(

谢谢

postgresql inheritance triggers partitioning plpgsql

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

Docker:容器如何在没有卷的情况下持久化数据?

我正在运行 docker-compose 环境中使用的官方 solr 6.6 容器,没有任何相关卷。如果我修改正在运行的 solr 容器,则数据在重新启动后仍然存在。我没有看到安装任何卷,它适用于普通的 solr 容器:

docker run --name solr_test -d -p 8983:8983 -t library/solr:6.6
docker exec -it solr_test /bin/bash -c 'echo woot > /opt/solr/server/solr/testfile'
docker stop solr_test
docker start solr_test
docker exec -it solr_test cat /opt/solr/server/solr/testfile
Run Code Online (Sandbox Code Playgroud)

上面的示例打印“woot”。我认为容器不保留任何数据?另外,文件中提到,Solr的内核处于容器坚持。我发现,关于容器持久性,我需要像这里提到的那样自己添加卷。所以我很困惑:容器是否存储容器内更改的数据?solr 容器如何实现这种行为?我看到的唯一选择是我误解了 docker 的持久性,或者容器的构建可以设置某种选项来实现这一点,我不知道也没有在 solr Dockerfile 中看到。

persistence docker

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

SQL:获取所有客户的最新付款?

即时通讯使用Mysql 5.1并给出一个表customer with customerid,paymentdate我需要所有客户的最新付款.所以带有条目的表

row, customerid, paymentdate
1    5           2011-03-01
2    5           2011-04-01
3    6           2011-01-01
4    7           2011-01-01
5    7           2011-02-01
Run Code Online (Sandbox Code Playgroud)

应该返回2,3,5行查询

select max(paymentdate),customerid from payments where customerid=5;
Run Code Online (Sandbox Code Playgroud)

工作,我试图进入某种WHERE客户IN(...),但没有运气,因为它返回2列不仅1

谢谢


最后,答案激发了我找到相关信息并通过以下查询解决了问题(如文章评论中所述)

select * from (select * from payments order by paymentdate desc) as p group by customerid;
Run Code Online (Sandbox Code Playgroud)

来自相关mysql文章的mysql论坛解决方案的同样问题

mysql sql join

0
推荐指数
1
解决办法
1369
查看次数