11#ifndef FORTRAN_RUNTIME_FILE_H_
12#define FORTRAN_RUNTIME_FILE_H_
15#include "flang/Common/optional.h"
16#include "flang/Runtime/memory.h"
19namespace Fortran::runtime::io {
21enum class OpenStatus { Old, New, Scratch, Replace, Unknown };
22enum class CloseStatus { Keep, Delete };
23enum class Position { AsIs, Rewind, Append };
24enum class Action { Read, Write, ReadWrite };
28 using FileOffset = std::int64_t;
30 const char *path()
const {
return path_.get(); }
31 std::size_t pathLength()
const {
return pathLength_; }
33 bool mayRead()
const {
return mayRead_; }
34 bool mayWrite()
const {
return mayWrite_; }
35 bool mayPosition()
const {
return mayPosition_; }
36 bool mayAsynchronous()
const {
return mayAsynchronous_; }
37 void set_mayAsynchronous(
bool yes) { mayAsynchronous_ = yes; }
38 bool isTerminal()
const {
return isTerminal_; }
39 bool isWindowsTextFile()
const {
return isWindowsTextFile_; }
40 Fortran::common::optional<FileOffset> knownSize()
const {
return knownSize_; }
42 bool IsConnected()
const {
return fd_ >= 0; }
43 void Open(OpenStatus, Fortran::common::optional<Action>, Position,
45 void Predefine(
int fd);
53 std::size_t Read(FileOffset,
char *, std::size_t minBytes,
58 std::size_t Write(FileOffset,
const char *, std::size_t,
IoErrorHandler &);
64 int ReadAsynchronously(FileOffset,
char *, std::size_t,
IoErrorHandler &);
65 int WriteAsynchronously(
71 Position InquirePosition()
const;
82 bool RawSeek(FileOffset);
85 void SetPosition(FileOffset pos) {
87 openPosition_.reset();
93 std::size_t pathLength_;
95 bool mayWrite_{
false};
96 bool mayPosition_{
false};
97 bool mayAsynchronous_{
false};
98 Fortran::common::optional<Position>
100 FileOffset position_{0};
101 Fortran::common::optional<FileOffset> knownSize_;
102 bool isTerminal_{
false};
103 bool isWindowsTextFile_{
false};
109RT_API_ATTRS
bool IsATerminal(
int fd);
110RT_API_ATTRS
bool IsExtant(
const char *path);
111RT_API_ATTRS
bool MayRead(
const char *path);
112RT_API_ATTRS
bool MayWrite(
const char *path);
113RT_API_ATTRS
bool MayReadAndWrite(
const char *path);
114RT_API_ATTRS std::int64_t SizeInBytes(
const char *path);
Definition: terminator.h:23
Definition: io-error.h:26