我发现检查作用域是词法还是动态的程序是下面给出的程序(来源:http://inst.eecs.berkeley.edu/~cs61a/su10/resources/sp11-Jordy/scope/)
(define test
(let ((scope 'lexical))
(lambda () scope)))
(let ((scope 'dynamic))
(test))
Run Code Online (Sandbox Code Playgroud)
但这怎么可行呢?这应该始终打印'词汇(无论范围是词汇还是动态)对吗?因为在第一个'let'的本体范围内,范围总是被定义为'词汇..如果我错了请纠正我
从内核模块,我试图使用call_usermodehelper函数来执行可执行文件sha1,该文件将文件作为参数并将文件的SHA1哈希值写入另一个文件(命名为output)。可执行文件完美运行。
int result=-1;
name = "/home/file"
char *hargv[] = {"/home/sha1", name,NULL };
char *henvp[] = {"HOME=/", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
result = call_usermodehelper("/home/sha1", hargv, henvp, 1);
Run Code Online (Sandbox Code Playgroud)
但是大多数情况下,call_usermodehelper返回-14并无法执行可执行文件。可能是什么原因?
有时它可以工作,但是随后创建的输出文件被锁定(与直接运行sha1时不同),我必须先运行chown才能正确使用它。如何预防?
无论如何,没有call_usermodehelper可以执行此操作吗?
linux kernel-module linux-kernel user-mode-linux kernel-mode