我花了我的周末编程一个小愚人节的笑话,但它不能按我想要的方式工作.
我有一个基于Drupal 6的网站,我希望尽可能少地改变它.这个想法是,从/ files目录提供的所有图像都被重定向到外部网络服务器(myserver),它将图像颠倒翻转,然后将其提供给浏览器.
为了使Drupal网站(targetserver)将所有图像请求重定向到另一台服务器,我设置了一个.htaccess,如下所示:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} !^aprilFool$
RewriteRule ^(.*)$ http://myserver/aprilFool/?url=http://targetserver/files/$1 [R=302,L]
Run Code Online (Sandbox Code Playgroud)
到目前为止它很棒!当我启用所有内容时,愚人节的诡计会改变一些图像,并在客户端的浏览器中显示.
但是当我禁用.htaccess @targetserver时,我的浏览器拒绝意识到它只是一个临时的笑话而忘记了编辑过的图像:(
这是myserver/aprilFool上的Perl脚本的一个小节:
my $ua = LWP::UserAgent->new;
# Identify ourselves through the useragent, to prevent endless redirect loops
$ua->agent( 'aprilFool' );
# Load remote file
my $response = $ua->get( $url );
if ( $response->is_error ) { die "Cannot retrieve document $url\n"; }
my $imageData = $response->content;
# Determine the file's mime type, need that to determine if we want to change it or …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 node.js 上运行脚本,该脚本按顺序将数字发送到一个可执行文件a.out,然后将其平方并将结果写入其标准输出。发生这种情况时,将发送下一个号码。这是代码:
var spawn = require('child_process').spawn;
var p = spawn("./a.out",[],{"stdio":"pipe"});
p.stdout.setEncoding("utf8");
p.stdout.on("data",function(data){
var x = parseInt(data.trim()), y = Math.sqrt(x);
console.log("received",x);
if(++y===10) p.kill();
else {
console.log("sending",y);
p.stdin.write(y+"\n");
}
});
var start = 2;
console.log("sending",start);
p.stdin.write(start+"\n");
setTimeout(function(){ p.stdin.end(); },1000);
Run Code Online (Sandbox Code Playgroud)
a.out以下 C 程序的编译版本在哪里:
#include<stdio.h>
int main(){
int x;
while(scanf("%d",&x)!=EOF)
printf("%d\n",x*x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,我得到以下输出:
sending 2
received 4
sending 3
events.js:72
throw er; // Unhandled 'error' event
^
Error: write after end
Run Code Online (Sandbox Code Playgroud)
更改毫秒值setTimeout只会延迟错误。显然,我试图发送到的数据a.out被缓冲并仅在我终止管道时发送。我如何手动冲洗它?
当脏高速缓存行被刷新(由于任何原因)时,整个高速缓存行是否写入内存或 CPU 跟踪哪些字被写入并减少内存写入次数?
如果这在不同架构之间有所不同,我主要有兴趣了解 Blackfin 的这一点,但很高兴听到 x86、ARM 等方面的实践......
MySQL 5.1.63在Debian Sqeeze OS中占用了越来越多的内存.
这是我的最高输出:

目前MySQLd使用732Mb驻留内存(RES列),VIRT 855M.但它在两天前从大约330Mb的RAM开始.
不幸的是,有一天它通过一些未经识别的错误查询达到1.2G的峰值,并且永远不会下降......导致服务器关闭.
I tried the following stuffs to lower the VIRT (virtual memory) and RES (Resident RAM) using mysql console, without restarting the MySQLd server, but no success:
mysql> FLUSH TABLES;
mysql> FLUSH QUERY CACHE;
mysql> RESET QUERY CACHE;
Run Code Online (Sandbox Code Playgroud)
The MySQL RAM usage remains 732m.
Any idea ?
我正在(重新)学习 C 编程,因此以下问题是为了理解。使用 scanf() 我了解到(或者我自己发现,实际上不需要很长时间就能达到这一点)刷新 stdin 是一件好事。我进一步发现(在您的帮助下)fflush(stdin) 不是标准的操作,例如不适用于 gcc。我继续使用下面的代码片段来刷新标准输入。它在这里提供(谢谢)。如果 stdin 不为空,它就可以正常工作。然而,如果 stdin 为空,则不起作用。我的刷新函数中的 fgetc() 只是等待并阻止程序。事实上,到目前为止我所知道的所有其他标准输入读取函数(scanf()、fgetc()、gets()、fgets()、getchar())都显示出相同的行为。所以我的刷新函数实际上是一个条件刷新:它仅在缓冲区不为空时刷新。如果它为空,则刷新会阻止程序并等待标准输入的输入。这不是我想要的。所以,我需要一种方法来检查 stdin 是否为空。如果是我继续。如果不是,我运行我的冲洗功能。
所以,我正在寻找一种 C 标准方法来检查 stdin 是否为空。
非常感谢您的帮助!
void flush_line(FILE *);
/* function to flush stdin in a C standard way since*/
/* fflush(stdin) has undefined behaviour. */
/* s. http://stackoverflow.com/questions/20081062/fflushstdin-does-not-work-compiled-with-gcc-in-cygwin-but-does-compiled-with-v */
void flush_line(FILE *fin)
{
int ch;
do
{
ch = fgetc(fin);
} while (ch != '\n' && ch != EOF);
}
Run Code Online (Sandbox Code Playgroud) 我正在用 python 在 RPi 和相机之间进行串行通信。我使用从 RPi 发送一些数据ser.write(),并使用从 RPi 中的相机读取数据ser.read()。然后我想知道如果我在读取命令之后添加这些,会发生什么ser.flush(),ser.flushinput()并且会做什么。ser.flushoutput()
我假设ser.flush()会让程序等待,直到读取缓冲存储器中的所有数据。但我不明白另外两个会做什么
ser.write()有人可以告诉我,这三个在串行通信中使用时有什么区别,以及当我在或 之后单独使用它们时会发生什么ser.read()。
为了同步和检索数据库生成的 ID,我觉得被迫EntityManager.flush()在几个地方调用。
除了性能影响之外,还有什么理由不打电话flush()呢?
换句话说,我的 (DAO, ...) 方法的调用者是否有任何可观察到的差异(如果有/没有)flush()?
我的场景是在支持 JPA 开发人员的框架上下文中。我将提供一些功能,这些功能可能需要也可能不需要flush()调用层次结构深处的某个地方。这些函数的用户是否必须知道是否/何时发生刷新,或者它是一个私有实现细节,对调用者没有明显影响?
我有一个包含几个cout语句的C++程序.我确保所有这些都以一个结尾endl.我的问题是程序很少停止,直到用户按下Enter(所以我假设输出缓冲区并不总是按照它应该刷新).按Enter键恢复程序执行.这是非常有问题的,因为我的程序需要几个小时才能执行,因此我无法一直按下输入!请注意,有时程序会在一分钟后停止,有时会在一个多小时后停止.
这是一个小代码片段:
for(int i = 0; i < _numIterations; i++){
std::cout << "Iteration " << i << std::endl;
// Computations and more print statements.
}
Run Code Online (Sandbox Code Playgroud)
请注意,我通过嵌入Python使用Theano,我的Python代码也包含print语句.我的Python代码只调用print,而不是sys.stdout.flush()每次打印后.但是,在Python生成的print语句之后,程序执行很少挂起.我错过了一些明显的事吗?我应该sys.stdout.flush()在Python代码中调用吗?不幸的是,我无法提供更多代码,因为我的程序包含数十个类.
[编辑]我挂了一个调试器时暂停了程序,没有可用的源显示.调用堆栈是:

似乎线程正在等待.但是,我自己没有设置这些线程.它们要么是由Cuda生成的,要么是我正在使用的Havok物理引擎.我会调查.
我有一个长时间运行的 C 程序,它在开始时打开一个文件,在执行期间写出“有趣”的东西,并在它完成之前关闭文件。使用gcc -o test test.c(gcc version 5.3.1.)编译的代码如下所示:
//contents of test.c
#include<stdio.h>
FILE * filept;
int main() {
filept = fopen("test.txt","w");
unsigned long i;
for (i = 0; i < 1152921504606846976; ++i) {
if (i == 0) {//This case is interesting!
fprintf(filept, "Hello world\n");
}
}
fclose(filept);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题是,由于这是一种科学计算(想想搜索素数,或者任何你最喜欢的难以破解的东西),它真的可以运行很长时间。由于我确定我不够耐心,我想中止当前的计算,但我想以一种智能的方式做到这一点,通过某种方式强制程序通过外部手段清除当前在操作系统中的所有数据缓冲区/磁盘缓存,无论在哪里。
这是我尝试过的(对于上面这个虚假程序,当然不是针对当前仍在运行的真实交易):
kill -6 <PID>(以及kill -3 <PID>)——正如@BartekBanachewicz 所建议的,但是在这些方法中的任何一种之后test.txt,在程序最开始创建的文件 …
“python 的 file.flush() 到底在做什么?” 说你应该首先f.flush()然后os.fsync(f)确保数据写入磁盘。
此外,“在 Python 中,close() 是否意味着 flush()?” 声称f.close()意味着flush()。
现在,问题是:我应该做
os.fsync(f)
f.close()
Run Code Online (Sandbox Code Playgroud)
或者,f.close()也意味着os.fsync()?
下面是Python的IO的文档中,Python的文件关闭的文档,和源代码。快速搜索“fsync”未返回任何相关信息。