Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 确定球拍程序是否在沙箱中_Macros_Racket_Sandbox - Fatal编程技术网

Macros 确定球拍程序是否在沙箱中

Macros 确定球拍程序是否在沙箱中,macros,racket,sandbox,Macros,Racket,Sandbox,是否可以确定Racket程序是否正在沙箱中运行 我问这个问题的原因是因为我有一个创建文件的Racket宏。DrRacket后台扩展器阻止创建文件(它应该这样做)。但是,这样做会导致窗口底部出现错误,表示无法创建文件 因此,我想确定我是否在沙箱中,如果在,请不要创建文件,并完成宏。通常,您无法确定是否在沙箱中。但是,您确实有机会捕获在尝试执行受限操作时抛出的错误。然而,问题是您不知道将抛出什么类型的错误。所以,你可以做的一件事就是抓住所有这些。用于捕获错误并捕获所有错误 (with-handler

是否可以确定Racket程序是否正在沙箱中运行

我问这个问题的原因是因为我有一个创建文件的Racket宏。DrRacket后台扩展器阻止创建文件(它应该这样做)。但是,这样做会导致窗口底部出现错误,表示无法创建文件


因此,我想确定我是否在沙箱中,如果在,请不要创建文件,并完成宏。

通常,您无法确定是否在沙箱中。但是,您确实有机会捕获在尝试执行受限操作时抛出的错误。然而,问题是您不知道将抛出什么类型的错误。所以,你可以做的一件事就是抓住所有这些。用于捕获错误并捕获所有错误

(with-handlers ([exn:fail?
                 (lambda (x) (displayln "failing cleanly"))])
    (make-temporary-file))
这里要小心,这里可能会发生与沙箱无关的错误。例如,您可能会因为无法创建文件而出现错误:

(with-handlers ([exn:fail:filesystem?
                 (lambda (x) (displayln "Coudln't open file"))]
                [exn:fail?
                 (lambda (x) (displayln "failing gracefully"))])
  (make-temporary-file))

通常,您无法确定自己是否在沙箱中。但是,您确实有机会捕获在尝试执行受限操作时抛出的错误。然而,问题是您不知道将抛出什么类型的错误。所以,你可以做的一件事就是抓住所有这些。用于捕获错误并捕获所有错误

(with-handlers ([exn:fail?
                 (lambda (x) (displayln "failing cleanly"))])
    (make-temporary-file))
这里要小心,这里可能会发生与沙箱无关的错误。例如,您可能会因为无法创建文件而出现错误:

(with-handlers ([exn:fail:filesystem?
                 (lambda (x) (displayln "Coudln't open file"))]
                [exn:fail?
                 (lambda (x) (displayln "failing gracefully"))])
  (make-temporary-file))

区分文件创建由于在沙箱中运行而失败与由于其他原因而失败是否确实很重要?如果没有,您可以使用带处理程序的
捕获
exn:fail:filesystem
(我猜是这样)。否则,尽管您可以调用
当前安全卫士
,但值AFAIK是完全不透明的。是的,据我所知
当前安全卫士
非常不透明。虽然您可以使用一个新的,但您需要给它一个父级,这样您就找不到将抛出的错误。区分文件创建是否由于在沙箱中运行而失败,以及是否由于其他原因而失败,这是否真的很重要?如果没有,您可以使用带处理程序的
捕获
exn:fail:filesystem
(我猜是这样)。否则,尽管您可以调用
当前安全卫士
,但值AFAIK是完全不透明的。是的,据我所知
当前安全卫士
非常不透明。虽然您可以使用一个新的,但您需要给它一个父级,这样您就无法找到将抛出的错误。