int main() {
int sz = 10;
goto end;
char bytes[sz];
end:
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在编译时遇到以下错误.我使用gcc和C99标准.
test.c: In function ‘main’:
test.c:3:2: error: jump into scope of identifier with variably modified type
test.c:5:1: note: label ‘end’ defined here
test.c:4:7: note: ‘bytes’ declared here
Run Code Online (Sandbox Code Playgroud) 我该如何选择pubsub和redis的阻塞操作?
Redis提供阻塞操作BLPOP
,阻止操作直到可以从列表中弹出元素.为什么我不应该使用它来实现功能PUBSUB
.PUBSUB
允许您定义比基本列表更高级别构造的通道.如果我的用例很简单,没有多个通道,我可以使用基本的阻塞操作.
我在linux上遇到了fgets()的一些问题.fgets从关闭的文件描述符返回数据.如果文件关闭,我希望它返回EOF.我能够提出我的问题的简化版本.
int main()
{
int i=0, j;
FILE *FD;
char p[128];
FD = fopen("junk", "r");
while(fgets(p, sizeof(p), FD))
{
close(fileno(FD));
printf("lineno=%d\n", i++);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望它只打印一行.这个问题有解决方法吗?
更新:正如有人在下面回答的那样,fgets正在缓冲文件并在FD关闭后返回数据.它正在缓冲4kB的数据.如果文件大小超过4k,则在读取4KB后获得EOF并且打印停止.否则如果文件大小感谢4k,它会打印到文件末尾.