1 //===--- Linux specialization of the File data structure ------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "hdr/types/off_t.h"
10 #include "src/__support/File/file.h"
11 #include "src/__support/macros/config.h"
13 namespace LIBC_NAMESPACE_DECL
{
15 FileIOResult
linux_file_write(File
*, const void *, size_t);
16 FileIOResult
linux_file_read(File
*, void *, size_t);
17 ErrorOr
<off_t
> linux_file_seek(File
*, off_t
, int);
18 int linux_file_close(File
*);
20 class LinuxFile
: public File
{
24 constexpr LinuxFile(int file_descriptor
, uint8_t *buffer
, size_t buffer_size
,
25 int buffer_mode
, bool owned
, File::ModeFlags modeflags
)
26 : File(&linux_file_write
, &linux_file_read
, &linux_file_seek
,
27 &linux_file_close
, buffer
, buffer_size
, buffer_mode
, owned
,
29 fd(file_descriptor
) {}
31 int get_fd() const { return fd
; }
34 // Create a File object and associate it with a fd.
35 ErrorOr
<LinuxFile
*> create_file_from_fd(int fd
, const char *mode
);
37 } // namespace LIBC_NAMESPACE_DECL