# Objek File

These APIs are a minimal emulation of the Python 2 C API for built-in file objects, which used to rely on the buffered I/O (`FILE*`) support from the C standard library. In Python 3, files and streams use the new `io` module, which defines several layers over the low-level unbuffered I/O of the operating system. The functions described below are convenience C wrappers over these new APIs, and meant mostly for internal error reporting in the interpreter; third-party code is advised to access the `io` APIs instead.

`PyFile_FromFd`(int fd, const char *name, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd)

  Create a Python file object from the file descriptor of an already opened file fd. The arguments name, encoding, errors and newline can be NULL to use the defaults; buffering can be -1 to use the default. name is ignored and kept for backward compatibility. Return NULL on failure. For a more comprehensive description of the arguments, please refer to the `io.open()` function documentation.

  Peringatan

  Karena aliran Python memiliki lapisan penyangga sendiri, mencampurnya dengan deskriptor file tingkat OS dapat menghasilkan berbagai masalah (seperti pengurutan data yang tidak terduga).

  Berubah pada versi 3.2: Abaikan atribut name.

int `PyObject_AsFileDescriptor`(PyObject *p)

  Mengembalikan deskriptor file yang terkait dengan p sebagai `int`. Jika objek adalah bilangan bulat, nilainya dikembalikan. Jika tidak, metode objek `fileno()` akan dipanggil jika ada; metode harus mengembalikan bilangan bulat, yang dikembalikan sebagai nilai deskriptor file. Menetapkan pengecualian dan mengembalikan `-1` jika gagal.

PyObject* `PyFile_GetLine`(PyObject *p, int n)
  Return value: New reference.

  Setara dengan `p.readline([n])`, fungsi ini membaca satu baris dari objek p. p dapat berupa objek file atau objek apa pun dengan metode `readline()`. Jika n adalah `0`, tepat satu baris terbaca, berapa pun panjang barisnya. Jika n lebih besar dari `0`, tidak lebih dari n byte yang akan dibaca dari file; garis parsial dapat dikembalikan. Dalam kedua kasus, string kosong dikembalikan jika akhir file dicapai dengan segera. Jika n lebih kecil dari `0`, bagaimanapun, satu baris dibaca berapa pun panjangnya, tapi `EOFError` dimunculkan jika akhir file dicapai dengan segera.

int `PyFile_WriteObject`(PyObject *obj, PyObject *p, int flags)

  Menulis objek obj ke file objek p. Satu-satunya tanda yang didukung untuk flags adalah `Py_PRINT_RAW`; jika diberikan, fungsi `str()` dari objek akan dituliskan sebagai pengganti `repr()`. Mengembalikan `0` saat sukses atau `-1` saat gagal; pengecualian yang sesuai akan ditetapkan.

int `PyFile_WriteString`(const char *s, PyObject *p)

  Menulis string s ke file objek p. Mengembalikan `0` saat sukses atau `-1` saat gagal; pengecualian yang sesuai akan ditetapkan.