• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# OS
2
3<!--introduced_in=v0.10.0-->
4
5> Stability: 2 - Stable
6
7<!-- source_link=lib/os.js -->
8
9The `os` module provides operating system-related utility methods and
10properties. It can be accessed using:
11
12```js
13const os = require('os');
14```
15
16## `os.EOL`
17<!-- YAML
18added: v0.7.8
19-->
20
21* {string}
22
23The operating system-specific end-of-line marker.
24
25* `\n` on POSIX
26* `\r\n` on Windows
27
28## `os.arch()`
29<!-- YAML
30added: v0.5.0
31-->
32
33* Returns: {string}
34
35Returns the operating system CPU architecture for which the Node.js binary was
36compiled. Possible values are `'arm'`, `'arm64'`, `'ia32'`, `'mips'`,
37`'mipsel'`, `'ppc'`, `'ppc64'`, `'s390'`, `'s390x'`, `'x32'`, and `'x64'`.
38
39The return value is equivalent to [`process.arch`][].
40
41## `os.constants`
42<!-- YAML
43added: v6.3.0
44-->
45
46* {Object}
47
48Contains commonly used operating system-specific constants for error codes,
49process signals, and so on. The specific constants defined are described in
50[OS constants](#os_os_constants_1).
51
52## `os.cpus()`
53<!-- YAML
54added: v0.3.3
55-->
56
57* Returns: {Object[]}
58
59Returns an array of objects containing information about each logical CPU core.
60
61The properties included on each object include:
62
63* `model` {string}
64* `speed` {number} (in MHz)
65* `times` {Object}
66  * `user` {number} The number of milliseconds the CPU has spent in user mode.
67  * `nice` {number} The number of milliseconds the CPU has spent in nice mode.
68  * `sys` {number} The number of milliseconds the CPU has spent in sys mode.
69  * `idle` {number} The number of milliseconds the CPU has spent in idle mode.
70  * `irq` {number} The number of milliseconds the CPU has spent in irq mode.
71
72<!-- eslint-disable semi -->
73```js
74[
75  {
76    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
77    speed: 2926,
78    times: {
79      user: 252020,
80      nice: 0,
81      sys: 30340,
82      idle: 1070356870,
83      irq: 0
84    }
85  },
86  {
87    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
88    speed: 2926,
89    times: {
90      user: 306960,
91      nice: 0,
92      sys: 26980,
93      idle: 1071569080,
94      irq: 0
95    }
96  },
97  {
98    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
99    speed: 2926,
100    times: {
101      user: 248450,
102      nice: 0,
103      sys: 21750,
104      idle: 1070919370,
105      irq: 0
106    }
107  },
108  {
109    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
110    speed: 2926,
111    times: {
112      user: 256880,
113      nice: 0,
114      sys: 19430,
115      idle: 1070905480,
116      irq: 20
117    }
118  },
119]
120```
121
122`nice` values are POSIX-only. On Windows, the `nice` values of all processors
123are always 0.
124
125## `os.devNull`
126<!-- YAML
127added: v14.18.0
128-->
129
130* {string}
131
132The platform-specific file path of the null device.
133
134* `\\.\nul` on Windows
135* `/dev/null` on POSIX
136
137## `os.endianness()`
138<!-- YAML
139added: v0.9.4
140-->
141
142* Returns: {string}
143
144Returns a string identifying the endianness of the CPU for which the Node.js
145binary was compiled.
146
147Possible values are `'BE'` for big endian and `'LE'` for little endian.
148
149## `os.freemem()`
150<!-- YAML
151added: v0.3.3
152-->
153
154* Returns: {integer}
155
156Returns the amount of free system memory in bytes as an integer.
157
158## `os.getPriority([pid])`
159<!-- YAML
160added: v10.10.0
161-->
162
163* `pid` {integer} The process ID to retrieve scheduling priority for.
164  **Default** `0`.
165* Returns: {integer}
166
167Returns the scheduling priority for the process specified by `pid`. If `pid` is
168not provided or is `0`, the priority of the current process is returned.
169
170## `os.homedir()`
171<!-- YAML
172added: v2.3.0
173-->
174
175* Returns: {string}
176
177Returns the string path of the current user's home directory.
178
179On POSIX, it uses the `$HOME` environment variable if defined. Otherwise it
180uses the [effective UID][EUID] to look up the user's home directory.
181
182On Windows, it uses the `USERPROFILE` environment variable if defined.
183Otherwise it uses the path to the profile directory of the current user.
184
185## `os.hostname()`
186<!-- YAML
187added: v0.3.3
188-->
189
190* Returns: {string}
191
192Returns the host name of the operating system as a string.
193
194## `os.loadavg()`
195<!-- YAML
196added: v0.3.3
197-->
198
199* Returns: {number[]}
200
201Returns an array containing the 1, 5, and 15 minute load averages.
202
203The load average is a measure of system activity calculated by the operating
204system and expressed as a fractional number.
205
206The load average is a Unix-specific concept. On Windows, the return value is
207always `[0, 0, 0]`.
208
209## `os.networkInterfaces()`
210<!-- YAML
211added: v0.6.0
212-->
213
214* Returns: {Object}
215
216Returns an object containing network interfaces that have been assigned a
217network address.
218
219Each key on the returned object identifies a network interface. The associated
220value is an array of objects that each describe an assigned network address.
221
222The properties available on the assigned network address object include:
223
224* `address` {string} The assigned IPv4 or IPv6 address
225* `netmask` {string} The IPv4 or IPv6 network mask
226* `family` {string} Either `IPv4` or `IPv6`
227* `mac` {string} The MAC address of the network interface
228* `internal` {boolean} `true` if the network interface is a loopback or
229  similar interface that is not remotely accessible; otherwise `false`
230* `scopeid` {number} The numeric IPv6 scope ID (only specified when `family`
231  is `IPv6`)
232* `cidr` {string} The assigned IPv4 or IPv6 address with the routing prefix
233  in CIDR notation. If the `netmask` is invalid, this property is set
234  to `null`.
235
236<!-- eslint-skip -->
237```js
238{
239  lo: [
240    {
241      address: '127.0.0.1',
242      netmask: '255.0.0.0',
243      family: 'IPv4',
244      mac: '00:00:00:00:00:00',
245      internal: true,
246      cidr: '127.0.0.1/8'
247    },
248    {
249      address: '::1',
250      netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
251      family: 'IPv6',
252      mac: '00:00:00:00:00:00',
253      scopeid: 0,
254      internal: true,
255      cidr: '::1/128'
256    }
257  ],
258  eth0: [
259    {
260      address: '192.168.1.108',
261      netmask: '255.255.255.0',
262      family: 'IPv4',
263      mac: '01:02:03:0a:0b:0c',
264      internal: false,
265      cidr: '192.168.1.108/24'
266    },
267    {
268      address: 'fe80::a00:27ff:fe4e:66a1',
269      netmask: 'ffff:ffff:ffff:ffff::',
270      family: 'IPv6',
271      mac: '01:02:03:0a:0b:0c',
272      scopeid: 1,
273      internal: false,
274      cidr: 'fe80::a00:27ff:fe4e:66a1/64'
275    }
276  ]
277}
278```
279
280## `os.platform()`
281<!-- YAML
282added: v0.5.0
283-->
284
285* Returns: {string}
286
287Returns a string identifying the operating system platform. The value is set
288at compile time. Possible values are `'aix'`, `'darwin'`, `'freebsd'`,
289`'linux'`, `'openbsd'`, `'sunos'`, and `'win32'`.
290
291The return value is equivalent to [`process.platform`][].
292
293The value `'android'` may also be returned if Node.js is built on the Android
294operating system. [Android support is experimental][Android building].
295
296## `os.release()`
297<!-- YAML
298added: v0.3.3
299-->
300
301* Returns: {string}
302
303Returns the operating system as a string.
304
305On POSIX systems, the operating system release is determined by calling
306[`uname(3)`][]. On Windows, `GetVersionExW()` is used. See
307<https://en.wikipedia.org/wiki/Uname#Examples> for more information.
308
309## `os.setPriority([pid, ]priority)`
310<!-- YAML
311added: v10.10.0
312-->
313
314* `pid` {integer} The process ID to set scheduling priority for.
315  **Default** `0`.
316* `priority` {integer} The scheduling priority to assign to the process.
317
318Attempts to set the scheduling priority for the process specified by `pid`. If
319`pid` is not provided or is `0`, the process ID of the current process is used.
320
321The `priority` input must be an integer between `-20` (high priority) and `19`
322(low priority). Due to differences between Unix priority levels and Windows
323priority classes, `priority` is mapped to one of six priority constants in
324`os.constants.priority`. When retrieving a process priority level, this range
325mapping may cause the return value to be slightly different on Windows. To avoid
326confusion, set `priority` to one of the priority constants.
327
328On Windows, setting priority to `PRIORITY_HIGHEST` requires elevated user
329privileges. Otherwise the set priority will be silently reduced to
330`PRIORITY_HIGH`.
331
332## `os.tmpdir()`
333<!-- YAML
334added: v0.9.9
335changes:
336  - version: v2.0.0
337    pr-url: https://github.com/nodejs/node/pull/747
338    description: This function is now cross-platform consistent and no longer
339                 returns a path with a trailing slash on any platform.
340-->
341
342* Returns: {string}
343
344Returns the operating system's default directory for temporary files as a
345string.
346
347## `os.totalmem()`
348<!-- YAML
349added: v0.3.3
350-->
351
352* Returns: {integer}
353
354Returns the total amount of system memory in bytes as an integer.
355
356## `os.type()`
357<!-- YAML
358added: v0.3.3
359-->
360
361* Returns: {string}
362
363Returns the operating system name as returned by [`uname(3)`][]. For example, it
364returns `'Linux'` on Linux, `'Darwin'` on macOS, and `'Windows_NT'` on Windows.
365
366See <https://en.wikipedia.org/wiki/Uname#Examples> for additional information
367about the output of running [`uname(3)`][] on various operating systems.
368
369## `os.uptime()`
370<!-- YAML
371added: v0.3.3
372changes:
373  - version: v10.0.0
374    pr-url: https://github.com/nodejs/node/pull/20129
375    description: The result of this function no longer contains a fraction
376                 component on Windows.
377-->
378
379* Returns: {integer}
380
381Returns the system uptime in number of seconds.
382
383## `os.userInfo([options])`
384<!-- YAML
385added: v6.0.0
386-->
387
388* `options` {Object}
389  * `encoding` {string} Character encoding used to interpret resulting strings.
390    If `encoding` is set to `'buffer'`, the `username`, `shell`, and `homedir`
391    values will be `Buffer` instances. **Default:** `'utf8'`.
392* Returns: {Object}
393
394Returns information about the currently effective user. On POSIX platforms,
395this is typically a subset of the password file. The returned object includes
396the `username`, `uid`, `gid`, `shell`, and `homedir`. On Windows, the `uid` and
397`gid` fields are `-1`, and `shell` is `null`.
398
399The value of `homedir` returned by `os.userInfo()` is provided by the operating
400system. This differs from the result of `os.homedir()`, which queries
401environment variables for the home directory before falling back to the
402operating system response.
403
404Throws a [`SystemError`][] if a user has no `username` or `homedir`.
405
406## `os.version()`
407<!-- YAML
408added: v13.11.0
409-->
410
411* Returns {string}
412
413Returns a string identifying the kernel version.
414
415On POSIX systems, the operating system release is determined by calling
416[`uname(3)`][]. On Windows, `RtlGetVersion()` is used, and if it is not
417available, `GetVersionExW()` will be used. See
418<https://en.wikipedia.org/wiki/Uname#Examples> for more information.
419
420## OS constants
421
422The following constants are exported by `os.constants`.
423
424Not all constants will be available on every operating system.
425
426### Signal constants
427<!-- YAML
428changes:
429  - version: v5.11.0
430    pr-url: https://github.com/nodejs/node/pull/6093
431    description: Added support for `SIGINFO`.
432-->
433
434The following signal constants are exported by `os.constants.signals`.
435
436<table>
437  <tr>
438    <th>Constant</th>
439    <th>Description</th>
440  </tr>
441  <tr>
442    <td><code>SIGHUP</code></td>
443    <td>Sent to indicate when a controlling terminal is closed or a parent
444    process exits.</td>
445  </tr>
446  <tr>
447    <td><code>SIGINT</code></td>
448    <td>Sent to indicate when a user wishes to interrupt a process
449    (<kbd>Ctrl</kbd>+<kbd>C</kbd>).</td>
450  </tr>
451  <tr>
452    <td><code>SIGQUIT</code></td>
453    <td>Sent to indicate when a user wishes to terminate a process and perform a
454    core dump.</td>
455  </tr>
456  <tr>
457    <td><code>SIGILL</code></td>
458    <td>Sent to a process to notify that it has attempted to perform an illegal,
459    malformed, unknown, or privileged instruction.</td>
460  </tr>
461  <tr>
462    <td><code>SIGTRAP</code></td>
463    <td>Sent to a process when an exception has occurred.</td>
464  </tr>
465  <tr>
466    <td><code>SIGABRT</code></td>
467    <td>Sent to a process to request that it abort.</td>
468  </tr>
469  <tr>
470    <td><code>SIGIOT</code></td>
471    <td>Synonym for <code>SIGABRT</code></td>
472  </tr>
473  <tr>
474    <td><code>SIGBUS</code></td>
475    <td>Sent to a process to notify that it has caused a bus error.</td>
476  </tr>
477  <tr>
478    <td><code>SIGFPE</code></td>
479    <td>Sent to a process to notify that it has performed an illegal arithmetic
480    operation.</td>
481  </tr>
482  <tr>
483    <td><code>SIGKILL</code></td>
484    <td>Sent to a process to terminate it immediately.</td>
485  </tr>
486  <tr>
487    <td><code>SIGUSR1</code> <code>SIGUSR2</code></td>
488    <td>Sent to a process to identify user-defined conditions.</td>
489  </tr>
490  <tr>
491    <td><code>SIGSEGV</code></td>
492    <td>Sent to a process to notify of a segmentation fault.</td>
493  </tr>
494  <tr>
495    <td><code>SIGPIPE</code></td>
496    <td>Sent to a process when it has attempted to write to a disconnected
497    pipe.</td>
498  </tr>
499  <tr>
500    <td><code>SIGALRM</code></td>
501    <td>Sent to a process when a system timer elapses.</td>
502  </tr>
503  <tr>
504    <td><code>SIGTERM</code></td>
505    <td>Sent to a process to request termination.</td>
506  </tr>
507  <tr>
508    <td><code>SIGCHLD</code></td>
509    <td>Sent to a process when a child process terminates.</td>
510  </tr>
511  <tr>
512    <td><code>SIGSTKFLT</code></td>
513    <td>Sent to a process to indicate a stack fault on a coprocessor.</td>
514  </tr>
515  <tr>
516    <td><code>SIGCONT</code></td>
517    <td>Sent to instruct the operating system to continue a paused process.</td>
518  </tr>
519  <tr>
520    <td><code>SIGSTOP</code></td>
521    <td>Sent to instruct the operating system to halt a process.</td>
522  </tr>
523  <tr>
524    <td><code>SIGTSTP</code></td>
525    <td>Sent to a process to request it to stop.</td>
526  </tr>
527  <tr>
528    <td><code>SIGBREAK</code></td>
529    <td>Sent to indicate when a user wishes to interrupt a process.</td>
530  </tr>
531  <tr>
532    <td><code>SIGTTIN</code></td>
533    <td>Sent to a process when it reads from the TTY while in the
534    background.</td>
535  </tr>
536  <tr>
537    <td><code>SIGTTOU</code></td>
538    <td>Sent to a process when it writes to the TTY while in the
539    background.</td>
540  </tr>
541  <tr>
542    <td><code>SIGURG</code></td>
543    <td>Sent to a process when a socket has urgent data to read.</td>
544  </tr>
545  <tr>
546    <td><code>SIGXCPU</code></td>
547    <td>Sent to a process when it has exceeded its limit on CPU usage.</td>
548  </tr>
549  <tr>
550    <td><code>SIGXFSZ</code></td>
551    <td>Sent to a process when it grows a file larger than the maximum
552    allowed.</td>
553  </tr>
554  <tr>
555    <td><code>SIGVTALRM</code></td>
556    <td>Sent to a process when a virtual timer has elapsed.</td>
557  </tr>
558  <tr>
559    <td><code>SIGPROF</code></td>
560    <td>Sent to a process when a system timer has elapsed.</td>
561  </tr>
562  <tr>
563    <td><code>SIGWINCH</code></td>
564    <td>Sent to a process when the controlling terminal has changed its
565    size.</td>
566  </tr>
567  <tr>
568    <td><code>SIGIO</code></td>
569    <td>Sent to a process when I/O is available.</td>
570  </tr>
571  <tr>
572    <td><code>SIGPOLL</code></td>
573    <td>Synonym for <code>SIGIO</code></td>
574  </tr>
575  <tr>
576    <td><code>SIGLOST</code></td>
577    <td>Sent to a process when a file lock has been lost.</td>
578  </tr>
579  <tr>
580    <td><code>SIGPWR</code></td>
581    <td>Sent to a process to notify of a power failure.</td>
582  </tr>
583  <tr>
584    <td><code>SIGINFO</code></td>
585    <td>Synonym for <code>SIGPWR</code></td>
586  </tr>
587  <tr>
588    <td><code>SIGSYS</code></td>
589    <td>Sent to a process to notify of a bad argument.</td>
590  </tr>
591  <tr>
592    <td><code>SIGUNUSED</code></td>
593    <td>Synonym for <code>SIGSYS</code></td>
594  </tr>
595</table>
596
597### Error constants
598
599The following error constants are exported by `os.constants.errno`.
600
601#### POSIX error constants
602
603<table>
604  <tr>
605    <th>Constant</th>
606    <th>Description</th>
607  </tr>
608  <tr>
609    <td><code>E2BIG</code></td>
610    <td>Indicates that the list of arguments is longer than expected.</td>
611  </tr>
612  <tr>
613    <td><code>EACCES</code></td>
614    <td>Indicates that the operation did not have sufficient permissions.</td>
615  </tr>
616  <tr>
617    <td><code>EADDRINUSE</code></td>
618    <td>Indicates that the network address is already in use.</td>
619  </tr>
620  <tr>
621    <td><code>EADDRNOTAVAIL</code></td>
622    <td>Indicates that the network address is currently unavailable for
623    use.</td>
624  </tr>
625  <tr>
626    <td><code>EAFNOSUPPORT</code></td>
627    <td>Indicates that the network address family is not supported.</td>
628  </tr>
629  <tr>
630    <td><code>EAGAIN</code></td>
631    <td>Indicates that there is no data available and to try the
632    operation again later.</td>
633  </tr>
634  <tr>
635    <td><code>EALREADY</code></td>
636    <td>Indicates that the socket already has a pending connection in
637    progress.</td>
638  </tr>
639  <tr>
640    <td><code>EBADF</code></td>
641    <td>Indicates that a file descriptor is not valid.</td>
642  </tr>
643  <tr>
644    <td><code>EBADMSG</code></td>
645    <td>Indicates an invalid data message.</td>
646  </tr>
647  <tr>
648    <td><code>EBUSY</code></td>
649    <td>Indicates that a device or resource is busy.</td>
650  </tr>
651  <tr>
652    <td><code>ECANCELED</code></td>
653    <td>Indicates that an operation was canceled.</td>
654  </tr>
655  <tr>
656    <td><code>ECHILD</code></td>
657    <td>Indicates that there are no child processes.</td>
658  </tr>
659  <tr>
660    <td><code>ECONNABORTED</code></td>
661    <td>Indicates that the network connection has been aborted.</td>
662  </tr>
663  <tr>
664    <td><code>ECONNREFUSED</code></td>
665    <td>Indicates that the network connection has been refused.</td>
666  </tr>
667  <tr>
668    <td><code>ECONNRESET</code></td>
669    <td>Indicates that the network connection has been reset.</td>
670  </tr>
671  <tr>
672    <td><code>EDEADLK</code></td>
673    <td>Indicates that a resource deadlock has been avoided.</td>
674  </tr>
675  <tr>
676    <td><code>EDESTADDRREQ</code></td>
677    <td>Indicates that a destination address is required.</td>
678  </tr>
679  <tr>
680    <td><code>EDOM</code></td>
681    <td>Indicates that an argument is out of the domain of the function.</td>
682  </tr>
683  <tr>
684    <td><code>EDQUOT</code></td>
685    <td>Indicates that the disk quota has been exceeded.</td>
686  </tr>
687  <tr>
688    <td><code>EEXIST</code></td>
689    <td>Indicates that the file already exists.</td>
690  </tr>
691  <tr>
692    <td><code>EFAULT</code></td>
693    <td>Indicates an invalid pointer address.</td>
694  </tr>
695  <tr>
696    <td><code>EFBIG</code></td>
697    <td>Indicates that the file is too large.</td>
698  </tr>
699  <tr>
700    <td><code>EHOSTUNREACH</code></td>
701    <td>Indicates that the host is unreachable.</td>
702  </tr>
703  <tr>
704    <td><code>EIDRM</code></td>
705    <td>Indicates that the identifier has been removed.</td>
706  </tr>
707  <tr>
708    <td><code>EILSEQ</code></td>
709    <td>Indicates an illegal byte sequence.</td>
710  </tr>
711  <tr>
712    <td><code>EINPROGRESS</code></td>
713    <td>Indicates that an operation is already in progress.</td>
714  </tr>
715  <tr>
716    <td><code>EINTR</code></td>
717    <td>Indicates that a function call was interrupted.</td>
718  </tr>
719  <tr>
720    <td><code>EINVAL</code></td>
721    <td>Indicates that an invalid argument was provided.</td>
722  </tr>
723  <tr>
724    <td><code>EIO</code></td>
725    <td>Indicates an otherwise unspecified I/O error.</td>
726  </tr>
727  <tr>
728    <td><code>EISCONN</code></td>
729    <td>Indicates that the socket is connected.</td>
730  </tr>
731  <tr>
732    <td><code>EISDIR</code></td>
733    <td>Indicates that the path is a directory.</td>
734  </tr>
735  <tr>
736    <td><code>ELOOP</code></td>
737    <td>Indicates too many levels of symbolic links in a path.</td>
738  </tr>
739  <tr>
740    <td><code>EMFILE</code></td>
741    <td>Indicates that there are too many open files.</td>
742  </tr>
743  <tr>
744    <td><code>EMLINK</code></td>
745    <td>Indicates that there are too many hard links to a file.</td>
746  </tr>
747  <tr>
748    <td><code>EMSGSIZE</code></td>
749    <td>Indicates that the provided message is too long.</td>
750  </tr>
751  <tr>
752    <td><code>EMULTIHOP</code></td>
753    <td>Indicates that a multihop was attempted.</td>
754  </tr>
755  <tr>
756    <td><code>ENAMETOOLONG</code></td>
757    <td>Indicates that the filename is too long.</td>
758  </tr>
759  <tr>
760    <td><code>ENETDOWN</code></td>
761    <td>Indicates that the network is down.</td>
762  </tr>
763  <tr>
764    <td><code>ENETRESET</code></td>
765    <td>Indicates that the connection has been aborted by the network.</td>
766  </tr>
767  <tr>
768    <td><code>ENETUNREACH</code></td>
769    <td>Indicates that the network is unreachable.</td>
770  </tr>
771  <tr>
772    <td><code>ENFILE</code></td>
773    <td>Indicates too many open files in the system.</td>
774  </tr>
775  <tr>
776    <td><code>ENOBUFS</code></td>
777    <td>Indicates that no buffer space is available.</td>
778  </tr>
779  <tr>
780    <td><code>ENODATA</code></td>
781    <td>Indicates that no message is available on the stream head read
782    queue.</td>
783  </tr>
784  <tr>
785    <td><code>ENODEV</code></td>
786    <td>Indicates that there is no such device.</td>
787  </tr>
788  <tr>
789    <td><code>ENOENT</code></td>
790    <td>Indicates that there is no such file or directory.</td>
791  </tr>
792  <tr>
793    <td><code>ENOEXEC</code></td>
794    <td>Indicates an exec format error.</td>
795  </tr>
796  <tr>
797    <td><code>ENOLCK</code></td>
798    <td>Indicates that there are no locks available.</td>
799  </tr>
800  <tr>
801    <td><code>ENOLINK</code></td>
802    <td>Indications that a link has been severed.</td>
803  </tr>
804  <tr>
805    <td><code>ENOMEM</code></td>
806    <td>Indicates that there is not enough space.</td>
807  </tr>
808  <tr>
809    <td><code>ENOMSG</code></td>
810    <td>Indicates that there is no message of the desired type.</td>
811  </tr>
812  <tr>
813    <td><code>ENOPROTOOPT</code></td>
814    <td>Indicates that a given protocol is not available.</td>
815  </tr>
816  <tr>
817    <td><code>ENOSPC</code></td>
818    <td>Indicates that there is no space available on the device.</td>
819  </tr>
820  <tr>
821    <td><code>ENOSR</code></td>
822    <td>Indicates that there are no stream resources available.</td>
823  </tr>
824  <tr>
825    <td><code>ENOSTR</code></td>
826    <td>Indicates that a given resource is not a stream.</td>
827  </tr>
828  <tr>
829    <td><code>ENOSYS</code></td>
830    <td>Indicates that a function has not been implemented.</td>
831  </tr>
832  <tr>
833    <td><code>ENOTCONN</code></td>
834    <td>Indicates that the socket is not connected.</td>
835  </tr>
836  <tr>
837    <td><code>ENOTDIR</code></td>
838    <td>Indicates that the path is not a directory.</td>
839  </tr>
840  <tr>
841    <td><code>ENOTEMPTY</code></td>
842    <td>Indicates that the directory is not empty.</td>
843  </tr>
844  <tr>
845    <td><code>ENOTSOCK</code></td>
846    <td>Indicates that the given item is not a socket.</td>
847  </tr>
848  <tr>
849    <td><code>ENOTSUP</code></td>
850    <td>Indicates that a given operation is not supported.</td>
851  </tr>
852  <tr>
853    <td><code>ENOTTY</code></td>
854    <td>Indicates an inappropriate I/O control operation.</td>
855  </tr>
856  <tr>
857    <td><code>ENXIO</code></td>
858    <td>Indicates no such device or address.</td>
859  </tr>
860  <tr>
861    <td><code>EOPNOTSUPP</code></td>
862    <td>Indicates that an operation is not supported on the socket. Although
863    <code>ENOTSUP</code> and <code>EOPNOTSUPP</code> have the same value
864    on Linux, according to POSIX.1 these error values should be distinct.)</td>
865  </tr>
866  <tr>
867    <td><code>EOVERFLOW</code></td>
868    <td>Indicates that a value is too large to be stored in a given data
869    type.</td>
870  </tr>
871  <tr>
872    <td><code>EPERM</code></td>
873    <td>Indicates that the operation is not permitted.</td>
874  </tr>
875  <tr>
876    <td><code>EPIPE</code></td>
877    <td>Indicates a broken pipe.</td>
878  </tr>
879  <tr>
880    <td><code>EPROTO</code></td>
881    <td>Indicates a protocol error.</td>
882  </tr>
883  <tr>
884    <td><code>EPROTONOSUPPORT</code></td>
885    <td>Indicates that a protocol is not supported.</td>
886  </tr>
887  <tr>
888    <td><code>EPROTOTYPE</code></td>
889    <td>Indicates the wrong type of protocol for a socket.</td>
890  </tr>
891  <tr>
892    <td><code>ERANGE</code></td>
893    <td>Indicates that the results are too large.</td>
894  </tr>
895  <tr>
896    <td><code>EROFS</code></td>
897    <td>Indicates that the file system is read only.</td>
898  </tr>
899  <tr>
900    <td><code>ESPIPE</code></td>
901    <td>Indicates an invalid seek operation.</td>
902  </tr>
903  <tr>
904    <td><code>ESRCH</code></td>
905    <td>Indicates that there is no such process.</td>
906  </tr>
907  <tr>
908    <td><code>ESTALE</code></td>
909    <td>Indicates that the file handle is stale.</td>
910  </tr>
911  <tr>
912    <td><code>ETIME</code></td>
913    <td>Indicates an expired timer.</td>
914  </tr>
915  <tr>
916    <td><code>ETIMEDOUT</code></td>
917    <td>Indicates that the connection timed out.</td>
918  </tr>
919  <tr>
920    <td><code>ETXTBSY</code></td>
921    <td>Indicates that a text file is busy.</td>
922  </tr>
923  <tr>
924    <td><code>EWOULDBLOCK</code></td>
925    <td>Indicates that the operation would block.</td>
926  </tr>
927  <tr>
928    <td><code>EXDEV</code></td>
929    <td>Indicates an improper link.
930  </tr>
931</table>
932
933#### Windows-specific error constants
934
935The following error codes are specific to the Windows operating system.
936
937<table>
938  <tr>
939    <th>Constant</th>
940    <th>Description</th>
941  </tr>
942  <tr>
943    <td><code>WSAEINTR</code></td>
944    <td>Indicates an interrupted function call.</td>
945  </tr>
946  <tr>
947    <td><code>WSAEBADF</code></td>
948    <td>Indicates an invalid file handle.</td>
949  </tr>
950  <tr>
951    <td><code>WSAEACCES</code></td>
952    <td>Indicates insufficient permissions to complete the operation.</td>
953  </tr>
954  <tr>
955    <td><code>WSAEFAULT</code></td>
956    <td>Indicates an invalid pointer address.</td>
957  </tr>
958  <tr>
959    <td><code>WSAEINVAL</code></td>
960    <td>Indicates that an invalid argument was passed.</td>
961  </tr>
962  <tr>
963    <td><code>WSAEMFILE</code></td>
964    <td>Indicates that there are too many open files.</td>
965  </tr>
966  <tr>
967    <td><code>WSAEWOULDBLOCK</code></td>
968    <td>Indicates that a resource is temporarily unavailable.</td>
969  </tr>
970  <tr>
971    <td><code>WSAEINPROGRESS</code></td>
972    <td>Indicates that an operation is currently in progress.</td>
973  </tr>
974  <tr>
975    <td><code>WSAEALREADY</code></td>
976    <td>Indicates that an operation is already in progress.</td>
977  </tr>
978  <tr>
979    <td><code>WSAENOTSOCK</code></td>
980    <td>Indicates that the resource is not a socket.</td>
981  </tr>
982  <tr>
983    <td><code>WSAEDESTADDRREQ</code></td>
984    <td>Indicates that a destination address is required.</td>
985  </tr>
986  <tr>
987    <td><code>WSAEMSGSIZE</code></td>
988    <td>Indicates that the message size is too long.</td>
989  </tr>
990  <tr>
991    <td><code>WSAEPROTOTYPE</code></td>
992    <td>Indicates the wrong protocol type for the socket.</td>
993  </tr>
994  <tr>
995    <td><code>WSAENOPROTOOPT</code></td>
996    <td>Indicates a bad protocol option.</td>
997  </tr>
998  <tr>
999    <td><code>WSAEPROTONOSUPPORT</code></td>
1000    <td>Indicates that the protocol is not supported.</td>
1001  </tr>
1002  <tr>
1003    <td><code>WSAESOCKTNOSUPPORT</code></td>
1004    <td>Indicates that the socket type is not supported.</td>
1005  </tr>
1006  <tr>
1007    <td><code>WSAEOPNOTSUPP</code></td>
1008    <td>Indicates that the operation is not supported.</td>
1009  </tr>
1010  <tr>
1011    <td><code>WSAEPFNOSUPPORT</code></td>
1012    <td>Indicates that the protocol family is not supported.</td>
1013  </tr>
1014  <tr>
1015    <td><code>WSAEAFNOSUPPORT</code></td>
1016    <td>Indicates that the address family is not supported.</td>
1017  </tr>
1018  <tr>
1019    <td><code>WSAEADDRINUSE</code></td>
1020    <td>Indicates that the network address is already in use.</td>
1021  </tr>
1022  <tr>
1023    <td><code>WSAEADDRNOTAVAIL</code></td>
1024    <td>Indicates that the network address is not available.</td>
1025  </tr>
1026  <tr>
1027    <td><code>WSAENETDOWN</code></td>
1028    <td>Indicates that the network is down.</td>
1029  </tr>
1030  <tr>
1031    <td><code>WSAENETUNREACH</code></td>
1032    <td>Indicates that the network is unreachable.</td>
1033  </tr>
1034  <tr>
1035    <td><code>WSAENETRESET</code></td>
1036    <td>Indicates that the network connection has been reset.</td>
1037  </tr>
1038  <tr>
1039    <td><code>WSAECONNABORTED</code></td>
1040    <td>Indicates that the connection has been aborted.</td>
1041  </tr>
1042  <tr>
1043    <td><code>WSAECONNRESET</code></td>
1044    <td>Indicates that the connection has been reset by the peer.</td>
1045  </tr>
1046  <tr>
1047    <td><code>WSAENOBUFS</code></td>
1048    <td>Indicates that there is no buffer space available.</td>
1049  </tr>
1050  <tr>
1051    <td><code>WSAEISCONN</code></td>
1052    <td>Indicates that the socket is already connected.</td>
1053  </tr>
1054  <tr>
1055    <td><code>WSAENOTCONN</code></td>
1056    <td>Indicates that the socket is not connected.</td>
1057  </tr>
1058  <tr>
1059    <td><code>WSAESHUTDOWN</code></td>
1060    <td>Indicates that data cannot be sent after the socket has been
1061    shutdown.</td>
1062  </tr>
1063  <tr>
1064    <td><code>WSAETOOMANYREFS</code></td>
1065    <td>Indicates that there are too many references.</td>
1066  </tr>
1067  <tr>
1068    <td><code>WSAETIMEDOUT</code></td>
1069    <td>Indicates that the connection has timed out.</td>
1070  </tr>
1071  <tr>
1072    <td><code>WSAECONNREFUSED</code></td>
1073    <td>Indicates that the connection has been refused.</td>
1074  </tr>
1075  <tr>
1076    <td><code>WSAELOOP</code></td>
1077    <td>Indicates that a name cannot be translated.</td>
1078  </tr>
1079  <tr>
1080    <td><code>WSAENAMETOOLONG</code></td>
1081    <td>Indicates that a name was too long.</td>
1082  </tr>
1083  <tr>
1084    <td><code>WSAEHOSTDOWN</code></td>
1085    <td>Indicates that a network host is down.</td>
1086  </tr>
1087  <tr>
1088    <td><code>WSAEHOSTUNREACH</code></td>
1089    <td>Indicates that there is no route to a network host.</td>
1090  </tr>
1091  <tr>
1092    <td><code>WSAENOTEMPTY</code></td>
1093    <td>Indicates that the directory is not empty.</td>
1094  </tr>
1095  <tr>
1096    <td><code>WSAEPROCLIM</code></td>
1097    <td>Indicates that there are too many processes.</td>
1098  </tr>
1099  <tr>
1100    <td><code>WSAEUSERS</code></td>
1101    <td>Indicates that the user quota has been exceeded.</td>
1102  </tr>
1103  <tr>
1104    <td><code>WSAEDQUOT</code></td>
1105    <td>Indicates that the disk quota has been exceeded.</td>
1106  </tr>
1107  <tr>
1108    <td><code>WSAESTALE</code></td>
1109    <td>Indicates a stale file handle reference.</td>
1110  </tr>
1111  <tr>
1112    <td><code>WSAEREMOTE</code></td>
1113    <td>Indicates that the item is remote.</td>
1114  </tr>
1115  <tr>
1116    <td><code>WSASYSNOTREADY</code></td>
1117    <td>Indicates that the network subsystem is not ready.</td>
1118  </tr>
1119  <tr>
1120    <td><code>WSAVERNOTSUPPORTED</code></td>
1121    <td>Indicates that the <code>winsock.dll</code> version is out of
1122    range.</td>
1123  </tr>
1124  <tr>
1125    <td><code>WSANOTINITIALISED</code></td>
1126    <td>Indicates that successful WSAStartup has not yet been performed.</td>
1127  </tr>
1128  <tr>
1129    <td><code>WSAEDISCON</code></td>
1130    <td>Indicates that a graceful shutdown is in progress.</td>
1131  </tr>
1132  <tr>
1133    <td><code>WSAENOMORE</code></td>
1134    <td>Indicates that there are no more results.</td>
1135  </tr>
1136  <tr>
1137    <td><code>WSAECANCELLED</code></td>
1138    <td>Indicates that an operation has been canceled.</td>
1139  </tr>
1140  <tr>
1141    <td><code>WSAEINVALIDPROCTABLE</code></td>
1142    <td>Indicates that the procedure call table is invalid.</td>
1143  </tr>
1144  <tr>
1145    <td><code>WSAEINVALIDPROVIDER</code></td>
1146    <td>Indicates an invalid service provider.</td>
1147  </tr>
1148  <tr>
1149    <td><code>WSAEPROVIDERFAILEDINIT</code></td>
1150    <td>Indicates that the service provider failed to initialized.</td>
1151  </tr>
1152  <tr>
1153    <td><code>WSASYSCALLFAILURE</code></td>
1154    <td>Indicates a system call failure.</td>
1155  </tr>
1156  <tr>
1157    <td><code>WSASERVICE_NOT_FOUND</code></td>
1158    <td>Indicates that a service was not found.</td>
1159  </tr>
1160  <tr>
1161    <td><code>WSATYPE_NOT_FOUND</code></td>
1162    <td>Indicates that a class type was not found.</td>
1163  </tr>
1164  <tr>
1165    <td><code>WSA_E_NO_MORE</code></td>
1166    <td>Indicates that there are no more results.</td>
1167  </tr>
1168  <tr>
1169    <td><code>WSA_E_CANCELLED</code></td>
1170    <td>Indicates that the call was canceled.</td>
1171  </tr>
1172  <tr>
1173    <td><code>WSAEREFUSED</code></td>
1174    <td>Indicates that a database query was refused.</td>
1175  </tr>
1176</table>
1177
1178### dlopen constants
1179
1180If available on the operating system, the following constants
1181are exported in `os.constants.dlopen`. See dlopen(3) for detailed
1182information.
1183
1184<table>
1185  <tr>
1186    <th>Constant</th>
1187    <th>Description</th>
1188  </tr>
1189  <tr>
1190    <td><code>RTLD_LAZY</code></td>
1191    <td>Perform lazy binding. Node.js sets this flag by default.</td>
1192  </tr>
1193  <tr>
1194    <td><code>RTLD_NOW</code></td>
1195    <td>Resolve all undefined symbols in the library before dlopen(3)
1196    returns.</td>
1197  </tr>
1198  <tr>
1199    <td><code>RTLD_GLOBAL</code></td>
1200    <td>Symbols defined by the library will be made available for symbol
1201    resolution of subsequently loaded libraries.</td>
1202  </tr>
1203  <tr>
1204    <td><code>RTLD_LOCAL</code></td>
1205    <td>The converse of <code>RTLD_GLOBAL</code>. This is the default behavior
1206    if neither flag is specified.</td>
1207  </tr>
1208  <tr>
1209    <td><code>RTLD_DEEPBIND</code></td>
1210    <td>Make a self-contained library use its own symbols in preference to
1211    symbols from previously loaded libraries.</td>
1212  </tr>
1213</table>
1214
1215### Priority constants
1216<!-- YAML
1217added: v10.10.0
1218-->
1219
1220The following process scheduling constants are exported by
1221`os.constants.priority`.
1222
1223<table>
1224  <tr>
1225    <th>Constant</th>
1226    <th>Description</th>
1227  </tr>
1228  <tr>
1229    <td><code>PRIORITY_LOW</code></td>
1230    <td>The lowest process scheduling priority. This corresponds to
1231    <code>IDLE_PRIORITY_CLASS</code> on Windows, and a nice value of
1232    <code>19</code> on all other platforms.</td>
1233  </tr>
1234  <tr>
1235    <td><code>PRIORITY_BELOW_NORMAL</code></td>
1236    <td>The process scheduling priority above <code>PRIORITY_LOW</code> and
1237    below <code>PRIORITY_NORMAL</code>. This corresponds to
1238    <code>BELOW_NORMAL_PRIORITY_CLASS</code> on Windows, and a nice value of
1239    <code>10</code> on all other platforms.</td>
1240  </tr>
1241  <tr>
1242    <td><code>PRIORITY_NORMAL</code></td>
1243    <td>The default process scheduling priority. This corresponds to
1244    <code>NORMAL_PRIORITY_CLASS</code> on Windows, and a nice value of
1245    <code>0</code> on all other platforms.</td>
1246  </tr>
1247  <tr>
1248    <td><code>PRIORITY_ABOVE_NORMAL</code></td>
1249    <td>The process scheduling priority above <code>PRIORITY_NORMAL</code> and
1250    below <code>PRIORITY_HIGH</code>. This corresponds to
1251    <code>ABOVE_NORMAL_PRIORITY_CLASS</code> on Windows, and a nice value of
1252    <code>-7</code> on all other platforms.</td>
1253  </tr>
1254  <tr>
1255    <td><code>PRIORITY_HIGH</code></td>
1256    <td>The process scheduling priority above <code>PRIORITY_ABOVE_NORMAL</code>
1257    and below <code>PRIORITY_HIGHEST</code>. This corresponds to
1258    <code>HIGH_PRIORITY_CLASS</code> on Windows, and a nice value of
1259    <code>-14</code> on all other platforms.</td>
1260  </tr>
1261  <tr>
1262    <td><code>PRIORITY_HIGHEST</code></td>
1263    <td>The highest process scheduling priority. This corresponds to
1264    <code>REALTIME_PRIORITY_CLASS</code> on Windows, and a nice value of
1265    <code>-20</code> on all other platforms.</td>
1266  </tr>
1267</table>
1268
1269### libuv constants
1270
1271<table>
1272  <tr>
1273    <th>Constant</th>
1274    <th>Description</th>
1275  </tr>
1276  <tr>
1277    <td><code>UV_UDP_REUSEADDR</code></td>
1278    <td></td>
1279  </tr>
1280</table>
1281
1282[Android building]: https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os
1283[EUID]: https://en.wikipedia.org/wiki/User_identifier#Effective_user_ID
1284[`SystemError`]: errors.md#errors_class_systemerror
1285[`process.arch`]: process.md#process_process_arch
1286[`process.platform`]: process.md#process_process_platform
1287[`uname(3)`]: https://linux.die.net/man/3/uname
1288