_psutil_linux.c 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
  3. * Use of this source code is governed by a BSD-style license that can be
  4. * found in the LICENSE file.
  5. *
  6. * Linux-specific functions.
  7. */
  8. #ifndef _GNU_SOURCE
  9. #define _GNU_SOURCE 1
  10. #endif
  11. #include <Python.h>
  12. #include <linux/ethtool.h> // DUPLEX_*
  13. #include "_psutil_common.h"
  14. #include "arch/linux/disk.h"
  15. #include "arch/linux/mem.h"
  16. #include "arch/linux/net.h"
  17. #include "arch/linux/proc.h"
  18. #include "arch/linux/users.h"
  19. static PyMethodDef mod_methods[] = {
  20. // --- per-process functions
  21. #ifdef PSUTIL_HAVE_IOPRIO
  22. {"proc_ioprio_get", psutil_proc_ioprio_get, METH_VARARGS},
  23. {"proc_ioprio_set", psutil_proc_ioprio_set, METH_VARARGS},
  24. #endif
  25. #ifdef PSUTIL_HAVE_CPU_AFFINITY
  26. {"proc_cpu_affinity_get", psutil_proc_cpu_affinity_get, METH_VARARGS},
  27. {"proc_cpu_affinity_set", psutil_proc_cpu_affinity_set, METH_VARARGS},
  28. #endif
  29. // --- system related functions
  30. {"disk_partitions", psutil_disk_partitions, METH_VARARGS},
  31. {"users", psutil_users, METH_VARARGS},
  32. {"net_if_duplex_speed", psutil_net_if_duplex_speed, METH_VARARGS},
  33. // --- linux specific
  34. {"linux_sysinfo", psutil_linux_sysinfo, METH_VARARGS},
  35. // --- others
  36. {"check_pid_range", psutil_check_pid_range, METH_VARARGS},
  37. {"set_debug", psutil_set_debug, METH_VARARGS},
  38. {NULL, NULL, 0, NULL}
  39. };
  40. // May happen on old RedHat versions, see:
  41. // https://github.com/giampaolo/psutil/issues/607
  42. #ifndef DUPLEX_UNKNOWN
  43. #define DUPLEX_UNKNOWN 0xff
  44. #endif
  45. #if PY_MAJOR_VERSION >= 3
  46. #define INITERR return NULL
  47. static struct PyModuleDef moduledef = {
  48. PyModuleDef_HEAD_INIT,
  49. "_psutil_linux",
  50. NULL,
  51. -1,
  52. mod_methods,
  53. NULL,
  54. NULL,
  55. NULL,
  56. NULL
  57. };
  58. PyObject *PyInit__psutil_linux(void)
  59. #else /* PY_MAJOR_VERSION */
  60. #define INITERR return
  61. void init_psutil_linux(void)
  62. #endif /* PY_MAJOR_VERSION */
  63. {
  64. #if PY_MAJOR_VERSION >= 3
  65. PyObject *mod = PyModule_Create(&moduledef);
  66. #else
  67. PyObject *mod = Py_InitModule("_psutil_linux", mod_methods);
  68. #endif
  69. if (mod == NULL)
  70. INITERR;
  71. #ifdef Py_GIL_DISABLED
  72. PyUnstable_Module_SetGIL(mod, Py_MOD_GIL_NOT_USED);
  73. #endif
  74. if (PyModule_AddIntConstant(mod, "version", PSUTIL_VERSION)) INITERR;
  75. if (PyModule_AddIntConstant(mod, "DUPLEX_HALF", DUPLEX_HALF)) INITERR;
  76. if (PyModule_AddIntConstant(mod, "DUPLEX_FULL", DUPLEX_FULL)) INITERR;
  77. if (PyModule_AddIntConstant(mod, "DUPLEX_UNKNOWN", DUPLEX_UNKNOWN)) INITERR;
  78. psutil_setup();
  79. if (mod == NULL)
  80. INITERR;
  81. #if PY_MAJOR_VERSION >= 3
  82. return mod;
  83. #endif
  84. }