Page Menu
Home
Musing Studio
Search
Configure Global Search
Log In
Files
F10433308
tempfile.go
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
1 KB
Subscribers
None
tempfile.go
View Options
// Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package
fileutils
import
(
"os"
"path/filepath"
"strconv"
"sync"
"time"
)
// Random number state.
// We generate random temporary file names so that there's a good
// chance the file doesn't exist yet - keeps the number of tries in
// TempFile to a minimum.
var
rand
uint32
var
randmu
sync
.
Mutex
func
reseed
()
uint32
{
return
uint32
(
time
.
Now
().
UnixNano
()
+
int64
(
os
.
Getpid
()))
}
func
nextSuffix
()
string
{
randmu
.
Lock
()
r
:=
rand
if
r
==
0
{
r
=
reseed
()
}
r
=
r
*
1664525
+
1013904223
// constants from Numerical Recipes
rand
=
r
randmu
.
Unlock
()
return
strconv
.
Itoa
(
int
(
1e9
+
r
%
1e9
))[
1
:]
}
// TempFile creates a new temporary file in the directory dir
// with a name beginning with prefix and ending with ext, opens the
// file for reading and writing, and returns the resulting *os.File.
// If dir is the empty string, TempFile uses the default directory
// for temporary files (see os.TempDir).
// Multiple programs calling TempFile simultaneously
// will not choose the same file. The caller can use f.Name()
// to find the pathname of the file. It is the caller's responsibility
// to remove the file when no longer needed.
func
TempFile
(
dir
,
prefix
,
ext
string
)
(
f
*
os
.
File
,
err
error
)
{
if
dir
==
""
{
dir
=
os
.
TempDir
()
}
nconflict
:=
0
for
i
:=
0
;
i
<
10000
;
i
++
{
name
:=
filepath
.
Join
(
dir
,
prefix
+
nextSuffix
()
+
"."
+
ext
)
f
,
err
=
os
.
OpenFile
(
name
,
os
.
O_RDWR
|
os
.
O_CREATE
|
os
.
O_EXCL
,
0600
)
if
os
.
IsExist
(
err
)
{
if
nconflict
++
;
nconflict
>
10
{
randmu
.
Lock
()
rand
=
reseed
()
randmu
.
Unlock
()
}
continue
}
break
}
return
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Jan 20, 2:48 AM (1 d, 13 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3135671
Attached To
rWCLI writeas-cli
Event Timeline
Log In to Comment