东莞南城网站建设价格,seo关键词优化软件官网,为什么网站显示正在建设,石家庄房产网最新楼盘/* 高级Linux编程.pdf page24-25: temp_file.cmkstemp: 从一个文件名模板(结尾是#xff1a;XXXXXX)生成临时文件名#xff0c;创建这个临时文件#xff0c;将模式设置为仅当前用户可以访问#xff0c;并且以读写权限打开这个文件。mkstemp函数用其他字符替…/*
高级Linux编程.pdf page24-25: temp_file.c
mkstemp: 从一个文件名模板(结尾是XXXXXX)生成临时文件名创建这个临时文件将模式设置为仅当前用户可以访问并且以读写权限打开这个文件。
mkstemp函数用其他字符替换这些X以得到一个不重复的文件名函数返回已经打开的文件描述符。
由mkstemp创建的临时文件是不会被自动删除的。
如果这个临时文件只是程序内部使用而不会移交给其他程序在创建之后调用unlink是个不错的主意。
只有当所有指向该文件的描述符都被关闭的时候它才会被文件系统真正删除。
*/
#include stdio.h
#include stdlib.h
#include string.h
#include errno.h
extern int errno; // 使用外部全局变量errno
int writeTempfile(char *buffer, size_t length)
{
char temp_filename[] /tmp/temp_file.XXXXXX; // 这6个x必须要大写否则创建文件失败(Error: Invalid argument)
int fd mkstemp(temp_filename);
if(fd -1)
{
printf(Cant open tempfile [%s]\n, temp_filename);
perror(mkstemp); // perror: 也会显示错误描述信息
fprintf(stderr, ErrorMessage: %s\n, strerror(errno)); // strerror: 显示errno对应的错误描述信息
}
else
{
printf(fd %d\n, fd);
unlink(temp_filename);
write(fd, length, sizeof(length));
write(fd, buffer, length);
}
return fd;
}
char* readTempfile(int temp_file, size_t *length)
{
char *buffer;
int fd temp_file;
lseek(fd, 0, SEEK_SET);
read(fd, length, sizeof(*length));
buffer malloc(*length);
if(buffer ! NULL)
read(fd, buffer, *length);
close(fd);
return buffer;
}
int main(int argc, char *argv[])
{
char str[] What can I do for you?\n你知道我在干什么吗\n;
int len strlen(str);
int fd;
if((fd writeTempfile(str, len)) ! -1)
{
char *buf readTempfile(fd, len);
if(buf ! NULL)
printf(buf [%s]\t%d\n, buf, len);
else
printf(buf NULL\n);
}
return 0;
} 运行结果
[zcmt #128]$make
gcc -g -c -o a.o a.c
gcc -g -o a a.o
[zcmt #129]$./a
fd 3
buf [What can I do for you?
你知道我在干什么吗
] 54
[zcmt #130]$