我在c ++中使用一个使用特殊dprintf函数打印信息的应用程序,这是一个例子:
dprintf(verbose, "The value is: %d", i);
Run Code Online (Sandbox Code Playgroud)
我正在做的是当我为测试目的定义详细信息然后我打印信息时,当我正常执行时,我没有定义它,我没有在屏幕上看到无用的信息.我的问题是我该如何实现这一功能或实现相同的想法?
我正在将数据存档到DVD,我想要将DVD打包完整.我知道DVD上我想要的所有文件的名称和大小,但我不知道元数据占用了多少空间.我想在每张DVD上获得尽可能多的文件,所以我使用了一个带有贪婪的bin-packing的Bubblesearch启发式算法.我尝试了10,000种替代方案并获得最佳选择.目前我知道所有文件的大小,因为我不知道文件如何存储在ISO 9660文件系统中,我为元数据添加了大量的slop.我想减少污泥.
我可以使用,genisoimage -print-size但它太慢了 - 假设40,000个文件占用500MB,大约需要3秒钟.每张DVD需要8小时不在卡片中.我以前修改了genisoimage源代码,我真的不想尝试从源代码中挤出算法; 我希望有人知道更好的估算方法,或者可以指出一个有用的规范.
澄清问题和问题:
我需要刻录分成多张DVD的档案,通常一次大约五张.我试图解决的问题是决定将哪些文件放在每张DVD上,以便每张DVD(除了最后一张)尽可能充分.这个问题是NP难的.
我正在使用标准的贪婪打包算法,您首先放置最大的文件,然后将其放入第一张有足够空间的DVD中.所以j_random_hacker,我绝对不是从随机开始的.我从排序开始并使用Bubblesearch来扰乱文件的打包顺序.此程序将我的包装从估计容量的约80%提高到估计容量的99.5%以上.这个问题是关于更好地估计容量 ; 目前我估计的容量低于实际容量.
我编写了一个尝试10,000次扰动的程序,每个程序包含两个步骤:
第2步是我正在努力改进的步骤.正如Tyler D所暗示的那样,目前我正在"谨慎行事".但我想做得更好.我买不起,genisomage -print-size因为它太慢了.同样,我不能将文件tar到磁盘,因为它只是太慢,但tar文件与ISO 9660图像的大小不同.这是我需要预测的ISO 9660图像的大小.原则上这可以完全准确地完成,但我不知道该怎么做.这就是问题所在.
注意:这些文件位于具有3TB硬盘存储空间的计算机上.在所有情况下,文件的平均大小至少为10MB; 有时候它会大得多.所以有可能genisomage毕竟会足够快,但我怀疑它 - 似乎通过将ISO映像写入/ dev/null来工作,我无法想象当图像大小接近时它会足够快4.7GB.我现在无法访问该计算机,或者当我发布原始问题时.当我确实在晚上访问时,我会尝试获得更好的数字.但我认为这不是genisomage一个好的解决方案 - 虽然它可能是学习文件系统模型的好方法,它告诉我它是如何工作的.知道块大小为2KB已经很有帮助.
知道同一目录中的文件被刻录到samae DVD也很有用,这简化了搜索.我希望直接访问这些文件,这会排除tar-before-burning.(大多数文件都是音频或视频,这意味着尝试使用它们没有意义gzip.)
所以我目前正在研究一种新的编程语言.受并发编程和Haskell的启发,该语言的主要目标之一是管理副作用.或多或少,每个模块都需要指定它允许的副作用.所以,如果我正在制作游戏,那么图形模块将无法执行IO.输入模块无法绘制到屏幕上.AI模块必须是完全纯净的.游戏的脚本和插件可以访问非常有限的IO子集来读取配置文件.等等.
然而,副作用的构成并不明确.我正在寻找有关我可能想用我的语言考虑的主题的任何想法或建议.这是我目前的想法.
一些副作用是明显的.无论是打印到用户控制台还是发射导弹,任何读取或写入用户拥有文件或与外部硬件交互的操作都会产生副作用.
其他更微妙,这些是我真正感兴趣的.这些是诸如获取随机数,获得系统时间,睡眠线程,实现软件事务存储器,甚至是非常基本的东西,如分配内存.
与其他用于控制副作用的语言(看着你的Haskell)不同,我想设计我的语言是务实和实用的.对副作用的限制应该有两个目的:
考虑到这一点,如上所述,我应该如何处理"伪"边效应,如随机数和睡眠?还有什么我可能错过的?我可以通过哪些方式管理内存使用和资源时间?
是否POSIX标准或另一C标准提供了一种方式,以恢复从一个信号数的有意义的消息,在以同样的方式strerror()使得能够恢复从消息errno?Gnu C库有strsignal(),但如果可能的话,我想要一些可移植到BSD和其他Unix变种.
我正在测试用于检测子进程何时进行segfaulted的代码.想象一下,当这段代码并不总是段错误时,我感到很惊讶:
#include <stdio.h>
int main() {
char *p = (char *)(unsigned long)0;
putchar(*p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在Debian Linux 2.6.26内核下运行; 我的shell是ksh93来自Debian ksh软件包的AT&T ,版本M 93s + 2008-01-31.有时这个程序会出现段错误,但除此之外它只是以非零退出状态静默终止但没有消息.我的信号检测程序报告如下:
segfault terminated by signal 11: Segmentation fault
segfault terminated by signal 53: Real-time signal 19
segfault terminated by signal 11: Segmentation fault
segfault terminated by signal 53: Real-time signal 19
segfault terminated by signal 53: Real-time signal 19
segfault terminated by signal 53: Real-time signal 19
segfault terminated by signal 53: Real-time …Run Code Online (Sandbox Code Playgroud) 哪里可以找到linux内核中臭名昭着的list.h?
我记得一下子看到它,我不能再为我的生活找到它.我正在运行一个Windows框,所以如果你能指出我在一个很好的HTTP网站上托管它会很棒:)
谢谢.
只是一个简单的问题
printf("%d", 99 || 44) prints "1" in C
print 99 || 44 prints "99" in perl
Run Code Online (Sandbox Code Playgroud)
有两种不同的评估方式.每个人都有名字吗?
编辑:我很想知道与C相比,这个Perl评估是如何被普遍调用的.当你说"C example是X,而perl示例不是X,而是Y"时,你将使用哪些单词用于X和Y."短路"不是我想要的.
这个问题简短而甜蜜.
我知道指令之间可能会发生指令,但是在指令期间是否会发生中断?在将所有值加载到寄存器之前,是否可以中断加载多条指令?
mov r0, r1
< interrupt can happen here
ldm r0, {r1-r4} < can an interrupt happen **during** a load multiple instruction?
Run Code Online (Sandbox Code Playgroud) 我正在编写一个shell脚本,我希望在出现时使用256色支持.在一个公正的世界中,xterm只需将TERM环境变量设置为xterm-256color,我将用它tput colors来发现支持.
但我们生活在一个不公正的世界. 即使在推出时也xterm设置TERM为.我可以在shell脚本中做些什么来发现脚本是否运行时stdout连接到运行在256色窗口中的tty ?如果是这样,我可以自己设置环境变量.xtermTERM=xterm-256colorxterm
使用最新的Debian版本的git(我正在使用1.7.2.5),我注意到.git/index文件可能会神秘地改变,而我没有执行任何我认为应该更改存储库的操作.(我的shell偶尔运行,git branch因此它可以显示检出的分支,但不应该更改任何内容.)更改会生成一个.git/index与原始文件长度相同但包含不同位的文件. 导致这种变化的原因是什么,我怎么能阻止它呢?
(这种变化很不方便,因为它会让Unison文件同步器变得混乱.)