17#ifndef CUTTLEFISH_COMMON_COMMON_LIBS_FS_FILE_INSTANCE_H_
18#define CUTTLEFISH_COMMON_COMMON_LIBS_FS_FILE_INSTANCE_H_
25#include <sys/inotify.h>
28#include <sys/select.h>
29#include <sys/socket.h>
40#include <linux/vm_sockets.h>
42#include <sys/eventfd.h>
111 int flags = O_CLOEXEC);
112 static Result<Fd> Open(std::string_view pathname,
int flags, mode_t mode = 0);
118 std::string_view host, std::string_view interface,
int port,
int type,
119 std::chrono::seconds timeout = std::chrono::seconds(0));
121 std::string_view host,
int port,
int type,
122 std::chrono::seconds timeout = std::chrono::seconds(0));
126 int in_type,
int timeout_seconds);
129 int in_type, mode_t mode);
135 static Result<Fd> ShmOpen(std::string_view
name,
int oflag,
int mode);
150 static std::string GetVhostUserVsockServerAddr(
151 unsigned int port,
int vhost_user_vsock_listening_cid);
152 static std::string GetVhostUserVsockClientAddr(
int cid);
154 unsigned int port,
int type,
155 std::optional<int> vhost_user_vsock_listening_cid,
156 unsigned int cid = VMADDR_CID_ANY);
158 int type, std::optional<int> vhost_user_vsock_listening_cid);
161 int Bind(
const struct sockaddr* addr, socklen_t addrlen);
162 int Connect(
const struct sockaddr* addr, socklen_t addrlen);
164 struct timeval* timeout);
167 bool Chmod(mode_t mode);
173 bool CopyFrom(
Fd& in,
size_t length,
Fd* stop =
nullptr);
176 bool SendFile(
Fd& in, off_t* offset,
size_t count);
181 int Fcntl(
int command,
int value);
187 int GetSockName(
struct sockaddr* addr, socklen_t* addrlen);
190 unsigned int VsockServerPort();
193 int Ioctl(
int request,
void* val =
nullptr);
197 bool IsSet(fd_set* in)
const;
213 static void Log(
const char* message);
214 off_t
LSeek(off_t offset,
int whence);
215 ssize_t
Recv(
void* buf,
size_t len,
int flags);
216 ssize_t
RecvMsg(
struct msghdr* msg,
int flags);
219 uint64_t offset)
const override;
221 int EventfdRead(eventfd_t* value);
223 ssize_t
Send(
const void* buf,
size_t len,
int flags);
224 ssize_t
SendMsg(
const struct msghdr* msg,
int flags);
230 template <
typename...
Args>
232 std::vector<int> fds;
233 (fds.push_back(sent_fds->fd_), ...);
241 void Set(fd_set* dest,
int* max_index)
const;
242 int SetSockOpt(
int level,
int optname,
const void* optval, socklen_t optlen);
243 int GetSockOpt(
int level,
int optname,
void* optval, socklen_t* optlen);
246 ScopedMMap MMap(
void* addr,
size_t length,
int prot,
int flags, off_t offset);
258 uint64_t offset)
override;
260 int EventfdWrite(eventfd_t value);
264 int Futimens(
const struct timespec times[2]);
271 Fd(
int fd,
int in_errno);
bool IsRegular() const
Definition: fd.h:200
static Result< Fd > Fifo(std::string_view pathname, mode_t mode)
Definition: fd.cc:214
static Result< Fd > Socket(int domain, int socket_type, int protocol)
Definition: fd.cc:228
int errno_
Definition: fd.h:276
int Shutdown(int how)
Definition: fd.cc:812
int Ioctl(int request, void *val=nullptr)
Definition: fd.cc:717
int Connect(const struct sockaddr *addr, socklen_t addrlen)
Definition: fd.cc:655
static Result< std::pair< Fd, Fd > > SocketPair(int domain, int type, int protocol)
Definition: fd.cc:187
ssize_t Send(const void *buf, size_t len, int flags)
Definition: fd.cc:782
static Fd ErrorFD(int error)
Definition: fd.cc:245
int Fcntl(int command, int value)
Definition: fd.cc:682
Result< uint64_t > SeekEnd(int64_t) override
Definition: fd.cc:806
int Futimens(const struct timespec times[2])
Definition: fd.cc:914
int UNMANAGED_Dup2(int newfd)
Definition: fd.cc:667
Result< uint64_t > Read(void *buf, uint64_t count) override
Definition: fd.cc:756
static void Log(const char *message)
Definition: fd.cc:636
static Result< Fd > SocketLocalClient(std::string_view name, bool is_abstract, int in_type)
Definition: fd.cc:247
int ConnectWithTimeout(const struct sockaddr *addr, socklen_t addrlen, struct timeval *timeout)
Definition: fd.cc:563
bool CopyFrom(Fd &in, size_t length, Fd *stop=nullptr)
Definition: fd.cc:446
int fd_
Definition: fd.h:275
ssize_t SendMsg(const struct msghdr *msg, int flags)
Definition: fd.cc:788
int SetTerminalRaw()
Definition: fd.cc:831
int SetSockOpt(int level, int optname, const void *optval, socklen_t optlen)
Definition: fd.cc:818
int Bind(const struct sockaddr *addr, socklen_t addrlen)
Definition: fd.cc:649
bool SendFile(Fd &in, off_t *offset, size_t count)
Definition: fd.cc:512
void Close()
Definition: fd.cc:535
std::string identity_
Definition: fd.h:277
std::string StrError() const
Definition: fd.cc:856
friend class Fd
Definition: fd.h:91
bool IsOpen() const
Definition: fd.h:194
Result< uint64_t > Write(const void *buf, uint64_t count) override
Definition: fd.cc:878
int UNMANAGED_Dup()
Definition: fd.cc:661
bool IsATTY()
Definition: fd.cc:908
int Fchdir()
Definition: fd.cc:673
Result< uint64_t > SeekSet(uint64_t) override
Definition: fd.cc:794
Result< uint64_t > SeekCur(int64_t) override
Definition: fd.cc:800
int Listen(int backlog)
Definition: fd.cc:732
Fd & operator=(Fd &)=delete
int InotifyAddWatch(const std::string &pathname, uint32_t mask)
Definition: fd.cc:921
static Result< std::pair< Fd, std::string > > Mkostemp(std::string_view path, int flags=O_CLOEXEC)
Definition: fd.cc:235
static Result< Fd > Open(std::string_view pathname, int flags, mode_t mode=0)
Definition: fd.cc:195
bool is_regular_file_
Definition: fd.h:278
static Result< Fd > SocketClient(std::string_view host, int port, int type, std::chrono::seconds timeout=std::chrono::seconds(0))
Definition: fd.cc:283
ScopedMMap MMap(void *addr, size_t length, int prot, int flags, off_t offset)
Definition: fd.cc:861
bool Chmod(mode_t mode)
Definition: fd.cc:557
static Result< std::pair< Fd, Fd > > Pipe()
Definition: fd.cc:153
static Result< Fd > MemfdCreate(std::string_view name, unsigned int flags=0)
Definition: fd.cc:183
int GetSockOpt(int level, int optname, void *optval, socklen_t *optlen)
Definition: fd.cc:825
Result< void > Truncate(uint64_t length) override
Definition: fd.cc:869
int LinkAtCwd(const std::string &path)
Definition: fd.cc:723
Result< uint64_t > PWrite(const void *buf, uint64_t count, uint64_t offset) override
Definition: fd.cc:891
static Result< Fd > Socket6Client(std::string_view host, std::string_view interface, int port, int type, std::chrono::seconds timeout=std::chrono::seconds(0))
Definition: fd.cc:300
int GetSockName(struct sockaddr *addr, socklen_t *addrlen)
Definition: fd.cc:702
Result< uint64_t > PRead(void *buf, uint64_t count, uint64_t offset) const override
Definition: fd.cc:765
int Fsync()
Definition: fd.cc:688
bool IsSet(fd_set *in) const
Definition: fd.cc:626
off_t LSeek(off_t offset, int whence)
Definition: fd.cc:738
ssize_t SendFileDescriptors(const void *buf, size_t len, Args &&... sent_fds)
Definition: fd.h:231
void Set(fd_set *dest, int *max_index) const
Definition: fd.cc:639
void InotifyRmWatch(int watch)
Definition: fd.cc:925
ssize_t RecvMsg(struct msghdr *msg, int flags)
Definition: fd.cc:750
~Fd()
Definition: fd.cc:130
static Result< Fd > Creat(std::string_view path, mode_t mode)
Definition: fd.cc:210
static Result< Fd > Accept(const Fd &listener)
Definition: fd.cc:139
static Result< Fd > Dup(int unmanaged_fd)
Definition: fd.cc:146
ssize_t Recv(void *buf, size_t len, int flags)
Definition: fd.cc:744
bool CopyAllFrom(Fd &in, Fd *stop=nullptr)
Definition: fd.cc:501
static Result< Fd > SocketLocalServer(std::string_view name, bool is_abstract, int in_type, mode_t mode)
Definition: fd.cc:359
Result< void > Flock(int operation)
Definition: fd.cc:694
int GetErrno() const
Definition: fd.h:186
Definition: scoped_mmap.h:28
Definition: shared_fd.h:124
#define error(format, args...)
Definition: fec_private.h:201
char * name
Definition: libf2fs.c:1403
ssize_t SendFileDescriptorVector(borrowed_fd sockfd, const void *data, size_t len, const std::vector< int > &fds)
Definition: cmsg.cpp:32
Event
Definition: kernel_log_server.h:31
Definition: alloc_driver.h:20
tl::expected< T, StackTraceError > Result
Definition: result_type.h:30
std::vector< std::string_view > Args
Definition: incremental.h:28
__u32 mask
Definition: nl80211.h:0
uint8_t type
Definition: pairing_connection.h:0