/* SPDX-License-Identifier: GPL-3.0 * The Language Trail * * errno.c * * https://en.cppreference.com/w/c/header/errno.html * * COPYRIGHT NOTICE * Copyright (C) 2025-2026 0x4248 and contributors * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the license is not changed. * * This software is free and open source. Licensed under the GNU general * public license version 3.0 as published by the Free Software Foundation. */ // Here is a rundown of some error codes: // Note: this can differ from compiler, compiler version and system // 0 Success // 1 Operation not permitted // 2 No such file or directory // 3 No such process // 4 Interrupted system call // 5 Input/output error // 6 No such device or address // 7 Argument list too long // 8 Exec format error // 9 Bad file descriptor // 10 No child processes // 11 Resource temporarily unavailable // 12 Cannot allocate memory // 13 Permission denied // 14 Bad address // 15 Block device required // 16 Device or resource busy // 17 File exists // 18 Invalid cross-device link // 19 No such device // 20 Not a directory // 21 Is a directory // 22 Invalid argument // 23 Too many open files in system // 24 Too many open files // 25 Inappropriate ioctl for device // 26 Text file busy // 27 File too large // 28 No space left on device // 29 Illegal seek // 30 Read-only file system // 31 Too many links // 32 Broken pipe // 33 Numerical argument out of domain // 34 Numerical result out of range // 35 Resource deadlock avoided // 36 File name too long // 37 No locks available // 38 Function not implemented // 39 Directory not empty // 40 Too many levels of symbolic links // 41 Unknown error 41 // 42 No message of desired type // 43 Identifier removed // 44 Channel number out of range // 45 Level 2 not synchronized // 46 Level 3 halted // 47 Level 3 reset // 48 Link number out of range // 49 Protocol driver not attached // 50 No CSI structure available // 51 Level 2 halted // 52 Invalid exchange // 53 Invalid request descriptor // 54 Exchange full // 55 No anode // 56 Invalid request code // 57 Invalid slot // 58 Unknown error 58 // 59 Bad font file format // 60 Device not a stream // 61 No data available // 62 Timer expired // 63 Out of streams resources // 64 Machine is not on the network // 65 Package not installed // 66 Object is remote // 67 Link has been severed // 68 Advertise error // 69 Srmount error // 70 Communication error on send // 71 Protocol error // 72 Multihop attempted // 73 RFS specific error // 74 Bad message // 75 Value too large for defined data type // 76 Name not unique on network // 77 File descriptor in bad state // 78 Remote address changed // 79 Can not access a needed shared library // 80 Accessing a corrupted shared library // 81 .lib section in a.out corrupted // 82 Attempting to link in too many shared libraries // 83 Cannot exec a shared library directly // 84 Invalid or incomplete multibyte or wide character // 85 Interrupted system call should be restarted // 86 Streams pipe error // 87 Too many users // 88 Socket operation on non-socket // 89 Destination address required // 90 Message too long // 91 Protocol wrong type for socket // 92 Protocol not available // 93 Protocol not supported // 94 Socket type not supported // 95 Operation not supported // 96 Protocol family not supported // 97 Address family not supported by protocol // 98 Address already in use // 99 Cannot assign requested address // 100 Network is down // 101 Network is unreachable // 102 Network dropped connection on reset // 103 Software caused connection abort // 104 Connection reset by peer // 105 No buffer space available // 106 Transport endpoint is already connected // 107 Transport endpoint is not connected // 108 Cannot send after transport endpoint shutdown // 109 Too many references: cannot splice // 110 Connection timed out // 111 Connection refused // 112 Host is down // 113 No route to host // 114 Operation already in progress // 115 Operation now in progress // 116 Stale file handle // 117 Structure needs cleaning // 118 Not a XENIX named type file // 119 No XENIX semaphores available // 120 Is a named type file // 121 Remote I/O error // 122 Disk quota exceeded // 123 No medium found // 124 Wrong medium type // 125 Operation canceled // 126 Required key not available // 127 Key has expired // 128 Key has been revoked // 129 Key was rejected by service // 130 Owner died // 131 State not recoverable // 132 Operation not possible due to RF-kill // 133 Memory page has hardware error /** * Errno maps these values to constants which can make it much easier to write */ #include #include #include int foo_1(){ return -1; } void foo_2(){ /* Rather than returning an error code we can just set errno to the error */ errno = ENOENT; } void test_notUsingErrno(){ int ret; ret = foo_1(); if(ret){ printf("ERROR\n"); } else { printf("OK\n"); } return; } void test_usingErrno(){ foo_2(); /* We can read errno and then use strerror to tell the user what * went wrong */ if(errno){ /* ERROR: 2, No such file or directory */ printf("ERROR: %d, %s\n",errno, strerror(errno)); } else { printf("OK\n"); } return; } void test_stderr(){ /* In this demo we can het the name of an error number using stderr() */ for (int i=0 ; i < 150; i++) { printf("%d\t%s\n", i,strerror(i)); } } int main() { test_notUsingErrno(); test_usingErrno(); return 0; }