Saturday, 18 August 2018

Apa perbedaan error EACCESS dan EPERM pada linux programming.

Tulisan ini untuk mengingatkan saya tentang perbadaan mendasar antara kode kesalahan EACCES ("permission denied") dan EPERM ("Operation not permitted"). Dan tampaknya banyak programmer lain yang sama seperti saya. Sehingga banyak kode pengembalian yang seharusnya adalah EPERM menjadi EACCES.

Agar tidak ada lagi kesalahan seperti ini saya coba mengingatkan diri saya sendiri, "Permission denied" berarti hanya "izin ditolak" karena proses tidak memiliki hak istimewa yang cukup untuk melakukan proses yang diminta.

Sederhananya, kita ingin melakukan suatu proses yang hak proses itu hanya dimiliki oleh root dan kita tidak memiliki hak itu. Misal memanipulasi file yang kita tidak memiliki izin untuk melakukannya.

Sementara "operation not permitted" berarti operasi secara sistematis tidak diizinkan, dengan kata lain tidak bijaksana bagi sistem untuk melakukan operasi yang diminta - terlepas dari hak akses yang kita miliki. Dalam linux misalnya, chmodding sebuah file yang berada pada filesystem FAT, FAT tidak mendukung permission bits ini, dan tidak ada yang bisa dilakukan untuk masalah ini karena akan membahayakan integrity of the system. Hal ini tidak dapat dilakukan bahkan apabila saya adalah seorang root.

Kesimpulan dari ini adalah, jika kita menuliskan error dengan konstanta "E*", pikirkan terlebih dahulu sebelum memilih kode yang akan kita gunakan. Apakah hak pengguna berperan dalam error yang terjadi? Jika "Ya" gunakan EACCES dan jika tidak EPERM.


Tambahan:

Error EADDRINUSE berarti port yang kita ingin gunakan telah digunakan oleh server lain.

EADDRINUSE = E ADDR IN USE (port number in use)

No comments:

Post a comment