> угадываем, где создастся файл с именем zблабла. могу подсказать, если что.$ gcc -xc -<< EOF
> #include <stdlib.h>
> #include <stdio.h>
> #include <string.h>
> int main (void) {
> char *tmp[64];
> strcpy(tmp, "zXXXXXX");
> mkstemp(tmp);
> return 0;
> }
> EOF<stdin>: In function ‘main’:
<stdin>:7:2: warning: passing argument 1 of ‘strcpy’ from incompatible pointer type [enabled by default]
In file included from <stdin>:3:0:
/usr/include/string.h:125:14: note: expected ‘char * __restrict__’ but argument is of type ‘char **’
<stdin>:8:2: warning: passing argument 1 of ‘mkstemp’ from incompatible pointer type [enabled by default]
In file included from <stdin>:1:0:
/usr/include/stdlib.h:627:12: note: expected ‘char *’ but argument is of type ‘char **’
$ ls z* /tmp/z*
ls: невозможно получить доступ к z*: Нет такого файла или каталога
ls: невозможно получить доступ к /tmp/z*: Нет такого файла или каталога
$ ./a.out
$ ls z* /tmp/z*
ls: невозможно получить доступ к /tmp/z*: Нет такого файла или каталога
zcCkR18
$ _
>>> а если вдруг какой-то программе хочется выделить «свой tmp», то это ВНИЗАПНА!
>>> можно решить при помощи монтирования частных поддеревьев.
>> Ага, и так каждый вдох-выдох.
> ну действительно: зачем нам универсальное системное средство, мы же можем
> в каждую программу костылей напихать!
Именно о предложении пихать костыли (или дырки с приличным потенциалом) и возмущаюсь.
google://"insecure /tmp handling"
PS: пришлось удалить пустую строчку после инклудов, а то оверквотилка любезно заменяла первый из них на соответствующее предупреждение (вообще говоря, это off-by-one по осмысленности).