⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mktemp.c

📁 标准c库代码,可以应用于各个系统提供了大量的基本函数
💻 C
字号:
/* This is file MKTEMP.C *//* This file may have been modified by DJ Delorie (Jan 1991).  If so,** these modifications are Coyright (C) 1991 DJ Delorie, 24 Kirsten Ave,** Rochester NH, 03867-2954, USA.*//* * Copyright (c) 1987 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that: (1) source distributions retain this entire copyright * notice and comment, and (2) distributions including binaries display * the following acknowledgement:  ``This product includes software * developed by the University of California, Berkeley and its contributors'' * in the documentation or other materials provided with the distribution * and in all advertising materials mentioning features or use of this * software. Neither the name of the University nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. *//*FUNCTION<<mktemp>>, <<mkstemp>>---generate unused file nameINDEX	mktempINDEX	mkstempINDEX	_mktemp_rINDEX	_mkstemp_rANSI_SYNOPSIS	#include <stdio.h>	char *mktemp(char *<[path]>);	int mkstemp(char *<[path]>);	char *_mktemp_r(void *<[reent]>, char *<[path]>);	int *_mkstemp_r(void *<[reent]>, char *<[path]>);TRAD_SYNOPSIS	#include <stdio.h>	char *mktemp(<[path]>)	char *<[path]>;	int mkstemp(<[path]>)	char *<[path]>;	char *_mktemp_r(<[reent]>, <[path]>)	char *<[reent]>;	char *<[path]>;	int _mkstemp_r(<[reent]>, <[path]>)	char *<[reent]>;	char *<[path]>;DESCRIPTION<<mktemp>> and <<mkstemp>> attempt to generate a file name that is notyet in use for any existing file.  <<mkstemp>> creates the file and opens it for reading and writing; <<mktemp>> simply generates the file name.You supply a simple pattern for the generated file name, as the stringat <[path]>.  The pattern should be a valid filename (including pathinformation if you wish) ending with some number of `<<X>>'characters.  The generated filename will match the leading part of thename you supply, with the trailing `<<X>>' characters replaced by somecombination of digits and letters.The alternate functions <<_mktemp_r>> and <<_mkstemp_r>> are reentrantversions.  The extra argument <[reent]> is a pointer to a reentrancystructure.RETURNS<<mktemp>> returns the pointer <[path]> to the modified stringrepresenting an unused filename, unless it could not generate one, orthe pattern you provided is not suitable for a filename; in that case,it returns <<NULL>>.<<mkstemp>> returns a file descriptor to the newly created file,unless it could not generate an unused filename, or the pattern youprovided is not suitable for a filename; in that case, it returns<<-1>>.PORTABILITYANSI C does not require either <<mktemp>> or <<mkstemp>>; the SystemV Interface Definition requires <<mktemp>> as of Issue 2.Supporting OS subroutines required: <<getpid>>, <<open>>, <<stat>>.*/#include <sys/types.h>#include <fcntl.h>#include <sys/stat.h>#include <errno.h>#include <stdio.h>#include <ctype.h>#include <reent.h>static_DEFUN (_gettemp, (ptr, path, doopen),	struct _reent *ptr _AND	char *path _AND	register int *doopen){  register char *start, *trv;  struct stat sbuf;  unsigned int pid;  pid = _getpid_r (ptr);  for (trv = path; *trv; ++trv)		/* extra X's get set to 0's */    continue;  while (*--trv == 'X')    {      *trv = (pid % 10) + '0';      pid /= 10;    }  /*   * Check the target directory; if you have six X's and it   * doesn't exist this runs for a *very* long time.   */  for (start = trv + 1;; --trv)    {      if (trv <= path)	break;      if (*trv == '/')	{	  *trv = '\0';	  if (_stat_r (ptr, path, &sbuf))	    return (0);	  if (!(sbuf.st_mode & S_IFDIR))	    {	      ptr->_errno = ENOTDIR;	      return (0);	    }	  *trv = '/';	  break;	}    }  for (;;)    {      if (doopen)	{	  if ((*doopen = _open_r (ptr, path, O_CREAT | O_EXCL | O_RDWR, 0600))	      >= 0)	    return 1;	  if (ptr->_errno != EEXIST)	    return 0;	}      else if (_stat_r (ptr, path, &sbuf))	return (ptr->_errno == ENOENT ? 1 : 0);      /* tricky little algorithm for backward compatibility */      for (trv = start;;)	{	  if (!*trv)	    return 0;	  if (*trv == 'z')	    *trv++ = 'a';	  else	    {	      if (isdigit (*trv))		*trv = 'a';	      else		++ * trv;	      break;	    }	}    }  /*NOTREACHED*/}_DEFUN (_mkstemp_r, (ptr, path),	struct _reent *ptr _AND	char *path){  int fd;  return (_gettemp (ptr, path, &fd) ? fd : -1);}char *_DEFUN (_mktemp_r, (ptr, path),	struct _reent *ptr _AND	char *path){  return (_gettemp (ptr, path, (int *) NULL) ? path : (char *) NULL);}#ifndef _REENT_ONLY_DEFUN (mkstemp, (path),	char *path){  int fd;  return (_gettemp (_REENT, path, &fd) ? fd : -1);}char *_DEFUN (mktemp, (path),	char *path){  return (_gettemp (_REENT, path, (int *) NULL) ? path : (char *) NULL);}#endif /* ! defined (_REENT_ONLY) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -