在C++的早期,当它被用螺栓固定在C之上时,你不能使用NULL,因为它被定义为(void*)0
.你不能将NULL分配给除了之外的任何指针void*
,这使得它变得毫无用处.在那些日子里,人们接受了你使用0
(零)空指针.
直到今天,我继续使用零作为空指针,但我周围的人坚持使用NULL
.我个人认为给NULL
现有值一个name()没有任何好处- 因为我也喜欢将指针测试为真值:
if (p && !q)
do_something();
Run Code Online (Sandbox Code Playgroud)
然后使用零更有意义(如果你使用NULL
,你不能逻辑使用p && !q
- 你需要明确比较NULL
,除非你假设NULL
是零,在这种情况下为什么使用NULL
).
有没有客观的理由偏好零而不是NULL(反之亦然),或者只是个人偏好?
编辑:我应该添加(并且最初要说)使用RAII和异常,我很少使用零/ NULL指针,但有时你确实需要它们.
排序行列表的最简单方法是什么,对每行的最后一个字段进行排序?每行可以具有可变数量的字段.
就像是
sort -k -1
Run Code Online (Sandbox Code Playgroud)
是我想要的,但sort(1)不会从负数中选择字段而不是从开头.
我也希望能够选择字段分隔符.
编辑:为问题添加一些特异性:我要排序的列表是路径名列表.路径名可以是任意深度,因此可变数量的字段.我想对文件名组件进行排序.
此附加信息可能会更改操作行以提取最后一个字段(可能使用basename(1))的方式,但不会更改排序要求.
例如
/a/b/c/10-foo
/a/b/c/20-bar
/a/b/c/50-baz
/a/d/30-bob
/a/e/f/g/h/01-do-this-first
/a/e/f/g/h/99-local
Run Code Online (Sandbox Code Playgroud)
我希望这个列表按文件名排序,所有这些都以数字开头,表示文件的读取顺序.
我在下面添加了我的答案,这就是我目前正在做的事情.我曾希望有一种更简单的方法 - 也许是一种不同的排序实用程序 - 也许不需要操纵数据.
template <typename TAG>
fn(int left, TAG, int right)
{
}
fn(0, some_type_tag(), 1);
/* or */
fn(0,int(), 1); // where the primitive, int, is not empty.
Run Code Online (Sandbox Code Playgroud)
编辑:这个问题有两个视角.
/编辑
我的标签通常是空结构,但是在我的代码的某些部分,它们是原始类型的typedef.所以,我很想知道现代编译器是否会实际传递参数.这有两个方面.
让我们把它保持到gcc 4.5和msvc 2008+
做了一些在线搜索,找到了使用命名管道的简单"教程".但是,当我对后台工作做任何事情时,我似乎丢失了大量数据.
[[编辑:发现一个更简单的解决方案,请参阅回复帖子.所以我提出的问题现在是学术性的 - 如果有人想要一个工作服务器]]
使用Ubuntu 10.04和Linux 2.6.32-25-generic#45-Ubuntu SMP Sat Oct 16 19:52:42 UTC 2010 x86_64 GNU/Linux
GNU bash,版本4.1.5(1)-release(x86_64-pc-linux-gnu).
我的bash功能是:
function jqs
{
pipe=/tmp/__job_control_manager__
trap "rm -f $pipe; exit" EXIT SIGKILL
if [[ ! -p "$pipe" ]]; then
mkfifo "$pipe"
fi
while true
do
if read txt <"$pipe"
then
echo "$(date +'%Y'): new text is [[$txt]]"
if [[ "$txt" == 'quit' ]]
then
break
fi
fi
done
}
Run Code Online (Sandbox Code Playgroud)
我在后台运行:
> jqs&
[1] 5336
Run Code Online (Sandbox Code Playgroud)
现在我喂它:
for i in 1 2 3 4 …
Run Code Online (Sandbox Code Playgroud) 我正在解决Ubuntu 10.04中的问题,在恢复后,鼠标光标消失.
这可以通过chvt 1; chvt 7
在/etc/pm/sleep.d中的脚本中运行来"修复" ,以便这些命令在解冻和恢复时运行.
但是,X控制台并不总是vt#7,因此chvt 7
在这些情况下是错误的.
我想要做的是找出修复脚本中的当前vt,并确保我改回到该vt.
我怎样才能找到当前的vt?(tty(1)只报告"不是tty")
Linux/Unix/Posix是否为用户空间应用程序提供API以访问单调增加的时钟,精度为厘秒到毫秒?
在Linux上,/ proc/uptime提供了一个基于字符串的表示形式,表示系统启动的秒数的浮点数.
gettimeofday(2)不提供单调增加的时钟.
我可以在ITIMER_REAL时域中使用getitimer(2),将计时器设置为以(平台相关的)最大值开始并忽略生成的信号,但根据手册页,计时器可以运行的最长时间大约为100天,比我预期的运行时间短.
我有一个在Atmel AT91SAM9260EK板上运行的嵌入式Linux系统,我有两个进程以实时优先级运行.管理器进程使用POSIX消息队列定期"ping"工作进程,以检查工作进程的运行状况.通常往返ping大约需要1ms,但偶尔需要更长时间 - 大约800ms.没有其他进程以更高的优先级运行.
看来停顿可能与日志记录(syslog)有关.如果我停止记录问题似乎消失了.但是,如果日志文件位于JFFS2或NFS上,则没有任何区别.没有其他进程写入"磁盘" - 只是syslog.
我有哪些工具可以帮助我找出这些摊位发生的原因?我知道等待时间并将使用它.还有其他一些可能更有用的工具吗?
一些细节:
我想知道是否有一种Pythonic方法来处理长时间运行的函数中的错误,这些错误可能会导致部分错误,而这些错误不会影响函数的继续运行能力.
例如,考虑一个给定URL列表的函数,它以递归方式检索顶级URL路径下的资源和所有链接资源.它将检索到的资源存储在本地文件系统中,其目录结构镜像URL结构.本质上,这是一个页面列表的基本递归wget.
这个函数可能会失败的点很多:
检索或保存任何一个资源失败只会影响该函数继续处理该资源的能力以及可能与之链接的任何子资源,但可以继续检索其他资源.
一个简单的错误处理模型是,在第一个错误上,会引发一个适当的异常以供调用者处理.这个问题是它终止了函数并且不允许它继续.错误可能是固定的,并且函数从一开始就重新启动,但这会导致重做工作,任何永久性错误都可能意味着我们永远无法完成.
我想到的几个选择是:
在Python讨论中,我经常注意到某些方法被描述为Pythonic或非Pythonic.我想知道是否有任何特别的Pythonic方法来处理上述场景类型.
Python是否包含任何电池模型比异常处理的终止模型更复杂的错误处理,或者更复杂的电池是否使用我应该复制以保留Pythonic的错误处理模型?
注意:请不要专注于示例.我不打算在那个特定的空间里解决问题,但它似乎是一个很好的例子,大多数人都会对此有所了解.
我正在寻找一个可交换的密码 - 就是这样
E(K?,E(K?,P)) = E(K?,E(K?,P))
Run Code Online (Sandbox Code Playgroud)
但不是联想 - 也就是说
E(K,P) ? E(P,K)
Run Code Online (Sandbox Code Playgroud)
这排除了XOR,否则本来可以.
对称密码是优选的,但非对称密码也可以工作.
我想要实现的基本协议是:
有人可以建议我可以使用的密码并指出我对该密码的实现吗?
我对加密协议和应用程序有所了解,但我并没有真正了解大多数密码的数学.虽然分步数学指南也可以.
我计划在Clojure中实现它,所以任何Java库也都很好.但是,任何代码都很好,因为我理解代码.
我正在尝试开发线程抽象(来自Windows API的POSIX线程和线程),我非常希望能够使用方法指针启动它们,而不是函数指针.
我想要做的是线程的抽象是一个带有纯虚方法"runThread"的类,它将被植入未来的线程类中.
我还不知道Windows线程,但要启动POSIX线程,您需要一个函数指针,而不是方法指针.而且我无法找到一种方法将方法与实例相关联,因此它可以作为一个函数工作.我可能只是找不到关键字(我一直在搜索很多),我认为它几乎是Boost :: Bind()所做的,所以它必须存在.
你能帮助我吗 ?
c++ methods multithreading member-function-pointers function-pointers
我有一个 python 代码库,我已经将一个模块(文件)重构到一个包(目录)中,因为文件变得有点大且无法管理。但是,我无法使用新结构按需要运行我的单元测试。
我将我的单元测试文件直接放在它测试的代码旁边(这是一个要求,不能更改 - 没有单独的test
目录):
app/
+-- app.py
+-- config.py
+-- config_test.py
+-- model/
| +-- __init__.py
| +-- base.py
| +-- base_test.py
| +-- square.py
| +-- square_test.py
+-- test.py
+-- web.py
+-- web_test.py
Run Code Online (Sandbox Code Playgroud)
以前,model
包是model.py
带有model_test.py
测试套件的模块。
有一个顶级测试运行程序 -test.py
并且工作正常。它在model
目录中找到测试用例并成功运行它们(它使用了- 见文章结尾的discovery
功能):unittest
test.py
$ python test.py
Run Code Online (Sandbox Code Playgroud)
但是,我也希望能够直接运行model
目录中的测试用例:
$ python model/base_test.py
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为测试在包目录中。代码中的导入失败,因为它们要么在由测试套件直接导入时不在模块中,要么搜索路径错误。
例如,在 中model/square.py
,我可以base.py
通过以下两种方式之一导入:
from model import Base
Run Code Online (Sandbox Code Playgroud)
或者
from .base import …
Run Code Online (Sandbox Code Playgroud) linux ×5
c++ ×3
python ×2
shell ×2
unix ×2
bash ×1
console ×1
cryptography ×1
data-loss ×1
embedded ×1
latency ×1
methods ×1
named-pipes ×1
null ×1
sorting ×1
terminology ×1
timer ×1
unit-testing ×1