1 use fortanix_sgx_abi
::Fd
;
3 use super::abi
::usercalls
;
4 use crate::io
::{self, IoSlice, IoSliceMut}
;
6 use crate::sys
::{AsInner, FromInner, IntoInner}
;
14 pub fn new(fd
: Fd
) -> FileDesc
{
18 pub fn raw(&self) -> Fd
{
22 /// Extracts the actual filedescriptor without closing it.
23 pub fn into_raw(self) -> Fd
{
29 pub fn read(&self, buf
: &mut [u8]) -> io
::Result
<usize> {
30 usercalls
::read(self.fd
, &mut [IoSliceMut
::new(buf
)])
33 pub fn read_vectored(&self, bufs
: &mut [IoSliceMut
<'_
>]) -> io
::Result
<usize> {
34 usercalls
::read(self.fd
, bufs
)
37 pub fn write(&self, buf
: &[u8]) -> io
::Result
<usize> {
38 usercalls
::write(self.fd
, &[IoSlice
::new(buf
)])
41 pub fn write_vectored(&self, bufs
: &[IoSlice
<'_
>]) -> io
::Result
<usize> {
42 usercalls
::write(self.fd
, bufs
)
45 pub fn flush(&self) -> io
::Result
<()> {
46 usercalls
::flush(self.fd
)
50 impl AsInner
<Fd
> for FileDesc
{
51 fn as_inner(&self) -> &Fd
{
56 impl IntoInner
<Fd
> for FileDesc
{
57 fn into_inner(self) -> Fd
{
64 impl FromInner
<Fd
> for FileDesc
{
65 fn from_inner(fd
: Fd
) -> FileDesc
{
70 impl Drop
for FileDesc
{
72 usercalls
::close(self.fd
)