今天调试lxc,发现不能工作,问题追踪到tmpfile调用失败,No Such File or Directory????好奇怪
构造测试程序:
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
int main(void)
{
FILE*tempfp;
#ifdef __UCLIBC_HAS_LFS__
printf("#ifdef __UCLIBC_HAS_LFS__\n");
#endif
tempfp=tmpfile();
if(tempfp)
printf("Temporary file created\n");
else
{
printf("Unable to create temporary file,err:%d\n",errno);
exit(1);
}
return 0;
}
确实在某些环境OK,某些环境失败,很是奇怪.
找tmpfile在C库里面的
实现,发现了原因:
tmpfile创建的临时文件默认建立在/tmp目录,而根文件系统里面没有/tmp。
在根文件系统里面添加/tmp目录后,可以成功创建临时文件
另外1个好像问题,临时文件在哪里
#include
#include
int main(void)
{
char s[100];
FILE*tempfp;
#ifdef __UCLIBC_HAS_LFS__
printf("#ifdef __UCLIBC_HAS_LFS__\n");
#endif
tempfp=tmpfile();
if(tempfp)
printf("Temporary file created\n");
else
{
printf("Unable to create temporary file\n");
exit(1);
}
//sleep(10);
sprintf(s, "ls -l /proc/%d/fd", getpid());
system(s);
sleep(10);
return 0;
}
xxx:~/test$ gcc tmpfileT.c -o tmpfileT
xxx:~/test$ ./tmpfileT &
[1] 1523
xxx:~/test$ Temporary file created
total 0
lrwx------ 1 wangshixin wangshixin 64 12月 30 13:34 0 -> /dev/pts/3
lrwx------ 1 wangshixin wangshixin 64 12月 30 13:34 1 -> /dev/pts/3
lrwx------ 1 wangshixin wangshixin 64 12月 30 13:34 2 -> /dev/pts/3
lrwx------ 1 wangshixin wangshixin 64 12月 30 13:34 3 -> /tmp/tmpfaAOphK (deleted)
ls -l /tmp/
total 8
drwx------ 2 wangshixin wangshixin 4096 12月 29 14:17 ssh-cColJwaJzP
drwx------ 2 wangshixin wangshixin 4096 12月 29 16:57 ssh-IRqFCfsiNe
xxx:~/test$
[1]+ Done ./tmpfileT
3 -> /tmp/tmpfaAOphK (deleted)
给了个解释:
一般来说,tmpfile是根据时间算出的唯一的文件名,一般在/tmp下,open系统调用创建之后,马上unlink系统调用,当最终close之后,文件就从文件系统中移除了
阅读(1141) | 评论(0) | 转发(0) |