看来我完全误用了mkstemp
。不管我怎么用它,我总是会得到一个segfault。我用gcc -ggdb -Wall -Werror main.c
编译了下面最基本的程序,并用./a.out
运行它
#include <stdlib.h>
int main(int argc, char **argv) {
mkstemp("XXXXXX");
return 0;
}
它总是返回返回码139,并在终端上打印
[1] 23532 segmentation fault ./a.out
。(23532
总是变化,因为它是pid)。我试过:
切换
gcc
的标志(完全没有,以前的标志的许多组合,-Wextra
和-O0
)通过在
int
中保存结果文件描述符、休眠5秒并再次关闭文件描述符来更改代码。但我连睡觉的时间都没有…现在我没主意了…
最佳答案
从手册页:template
的最后六个字符必须是"XXXXXX"
,它们是
替换为使文件名唯一的字符串。因为它会
必须修改,template
不能是字符串常量,但应该是
声明为字符数组。
所以需要声明一个字符数组:
char filename[] = "fileXXXXXX";
mkstemp(filename);
关于c - 基本C mkstemp代码中的segfault,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48648386/