mirror of
https://github.com/golang/sys.git
synced 2026-02-08 11:46:04 +03:00
x/sys/unix: add support for O_TMPFILE in Linux
Since Linux 3.11, O_TMPFILE flag can be used in open syscall to create an unnamed file in a directory. The file occupies space in the filesystem, and can be given a name using linkat syscall. If the file is closed without being given a name, its contents are deleted. See the manpage open(2) in Linux for details. Exports O_TMPFILE for Linux in 386 and amd64 (other architectures already had it). Exports Linkat syscall and AT_SYMLINK_FOLLOW (used for giving a name to the file) for all Linux in all architectures. Fixes golang/go#7830. Change-Id: Ib82e44f405b227e227b9cbf317c2657b32e046f5 Reviewed-on: https://go-review.googlesource.com/21003 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
9d4e42a206
commit
23999e87b4
@@ -36,10 +36,10 @@ func Creat(path string, mode uint32) (fd int, err error) {
|
||||
return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)
|
||||
}
|
||||
|
||||
//sys linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)
|
||||
//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)
|
||||
|
||||
func Link(oldpath string, newpath string) (err error) {
|
||||
return linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0)
|
||||
return Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0)
|
||||
}
|
||||
|
||||
func Mkdir(path string, mode uint32) (err error) {
|
||||
|
||||
@@ -400,6 +400,7 @@ type EpollEvent C.struct_my_epoll_event
|
||||
const (
|
||||
AT_FDCWD = C.AT_FDCWD
|
||||
AT_REMOVEDIR = C.AT_REMOVEDIR
|
||||
AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
|
||||
AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
|
||||
)
|
||||
|
||||
|
||||
@@ -826,6 +826,7 @@ const (
|
||||
O_RDWR = 0x2
|
||||
O_RSYNC = 0x101000
|
||||
O_SYNC = 0x101000
|
||||
O_TMPFILE = 0x410000
|
||||
O_TRUNC = 0x200
|
||||
O_WRONLY = 0x1
|
||||
PACKET_ADD_MEMBERSHIP = 0x1
|
||||
|
||||
@@ -826,6 +826,7 @@ const (
|
||||
O_RDWR = 0x2
|
||||
O_RSYNC = 0x101000
|
||||
O_SYNC = 0x101000
|
||||
O_TMPFILE = 0x410000
|
||||
O_TRUNC = 0x200
|
||||
O_WRONLY = 0x1
|
||||
PACKET_ADD_MEMBERSHIP = 0x1
|
||||
|
||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(oldpath)
|
||||
if err != nil {
|
||||
|
||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(oldpath)
|
||||
if err != nil {
|
||||
|
||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(oldpath)
|
||||
if err != nil {
|
||||
|
||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(oldpath)
|
||||
if err != nil {
|
||||
|
||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(oldpath)
|
||||
if err != nil {
|
||||
|
||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(oldpath)
|
||||
if err != nil {
|
||||
|
||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(oldpath)
|
||||
if err != nil {
|
||||
|
||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(oldpath)
|
||||
if err != nil {
|
||||
|
||||
@@ -574,8 +574,9 @@ type EpollEvent struct {
|
||||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_NOFOLLOW = 0x100
|
||||
AT_REMOVEDIR = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_SYMLINK_NOFOLLOW = 0x100
|
||||
)
|
||||
|
||||
type Termios struct {
|
||||
|
||||
@@ -592,8 +592,9 @@ type EpollEvent struct {
|
||||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_NOFOLLOW = 0x100
|
||||
AT_REMOVEDIR = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_SYMLINK_NOFOLLOW = 0x100
|
||||
)
|
||||
|
||||
type Termios struct {
|
||||
|
||||
@@ -563,8 +563,9 @@ type EpollEvent struct {
|
||||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_NOFOLLOW = 0x100
|
||||
AT_REMOVEDIR = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_SYMLINK_NOFOLLOW = 0x100
|
||||
)
|
||||
|
||||
type Termios struct {
|
||||
|
||||
@@ -580,6 +580,7 @@ type EpollEvent struct {
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_REMOVEDIR = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_SYMLINK_NOFOLLOW = 0x100
|
||||
)
|
||||
|
||||
|
||||
@@ -585,6 +585,7 @@ type EpollEvent struct {
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_REMOVEDIR = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_SYMLINK_NOFOLLOW = 0x100
|
||||
)
|
||||
|
||||
|
||||
@@ -585,6 +585,7 @@ type EpollEvent struct {
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_REMOVEDIR = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_SYMLINK_NOFOLLOW = 0x100
|
||||
)
|
||||
|
||||
|
||||
@@ -590,6 +590,7 @@ type EpollEvent struct {
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_REMOVEDIR = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_SYMLINK_NOFOLLOW = 0x100
|
||||
)
|
||||
|
||||
|
||||
@@ -590,6 +590,7 @@ type EpollEvent struct {
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_REMOVEDIR = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_SYMLINK_NOFOLLOW = 0x100
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user