这两个操作创建一个空文件,并返回文件名,但mkstemp叶文件以独占方式打开,让你的手柄。是否有一个安全效益的C函数?这是否意味着存在在命令行版本安全孔?

顺便说一句,有趣的是,有在Linux上的C API几个相关的功能,其中大部分的说:“不要使用这个功能”(或类似)在他们的手册页。

有帮助吗?

解决方案

你可以很容易地从mktemp(1)源代码看,它本质上是做什么,但调用mkstemp(3)

在Linux的独占模式意味着函数将失败,如果该文件已经存在,它不能保证锁定。其他进程可以删除这个文件,然后再重新创建并用数据填充它,尽管文件句柄您的过程中被open(3)

有在C功能没有额外的安全性相比,命令行实用程序。

其他提示

在类Unix操作系统(包括Linux和Mac OS)的临时文件的一个技巧是,只要你打开文件,将其删除。您仍然可以访问该文件,但没有人能看到它或对它做任何事情,并会尽快关闭该文件消失,即使你的程序死掉一个可怕的死亡。

系统调用和命令行功能之间最明显的区别是,命令行功能是由人或他们的shell脚本使用,而系统调用总是由程序来完成。

这将是十分困难的手一人的文件句柄。

关于“安全”,你应该想想比赛条件:在同一时间一个程序调用mkstemp的几个实例,但每一个都保证有一个唯一的临时文件。如果程序掏出并称为命令行版本,它会是几乎不可能保证这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top