proc-env.scm 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, Roderic Morris,
  3. ; Marcus Crestani, Will Noble
  4. ; Access to Posix process environment
  5. (import-dynamic-externals "=scheme48external/posix")
  6. ; We multiplex a bunch of these to save typing.
  7. ;----------------
  8. ; 4.1 Process Identification
  9. (define (get-process-id)
  10. (integer->process-id (posix-get-pid #f)))
  11. (define (get-parent-process-id)
  12. (integer->process-id (posix-get-pid #t)))
  13. ;----------------
  14. ; 4.2 User Identification and 4.3 Process Groups
  15. (define (get-user-id)
  16. (call-imported-binding-2 posix-get-id #t #t))
  17. (define (get-effective-user-id)
  18. (call-imported-binding-2 posix-get-id #t #f))
  19. (define (get-group-id)
  20. (call-imported-binding-2 posix-get-id #f #t))
  21. (define (get-effective-group-id)
  22. (call-imported-binding-2 posix-get-id #f #f))
  23. (define (set-user-id! user-id)
  24. (call-imported-binding-2 posix-set-id! #t #t user-id))
  25. (define (set-effective-user-id! user-id)
  26. (call-imported-binding-2 posix-set-id! #t #f user-id))
  27. (define (set-group-id! group-id)
  28. (call-imported-binding-2 posix-set-id! #f #t group-id))
  29. (define (set-effective-group-id! group-id)
  30. (call-imported-binding-2 posix-set-id! #f #f group-id))
  31. (import-lambda-definition-2 posix-get-pid (parent?))
  32. (import-definition posix-get-id)
  33. (import-definition posix-set-id! "posix_set_id")
  34. (define (get-groups)
  35. (call-imported-binding-2 posix-get-groups))
  36. (define (get-login-name)
  37. (let ((name (call-imported-binding-2 posix-get-login)))
  38. (if name
  39. (byte-vector->os-string name)
  40. name)))
  41. (import-definition posix-get-groups)
  42. (import-definition posix-get-login)
  43. (import-lambda-definition-2 posix-set-sid ())
  44. ;----------------
  45. ; 4.4 System Identification
  46. ;
  47. ; The five values returned by uname().
  48. (import-lambda-definition-2 posix-sys-name (which))
  49. (define (os-name) (posix-sys-name 0))
  50. (define (os-node-name) (posix-sys-name 1))
  51. (define (os-release-name) (posix-sys-name 2))
  52. (define (os-version-name) (posix-sys-name 3))
  53. (define (machine-name) (posix-sys-name 4))
  54. ;----------------
  55. ; 4.5 Get Process Times
  56. ;
  57. ;----------------
  58. ; 4.6 Environment Variables
  59. ; We cheat here by using one type for both the variable names and
  60. ; their values. The rules are the same for both, after all.
  61. (define (lookup-environment-variable name)
  62. (cond
  63. ((external-lookup-environment-variable (x->os-byte-vector name))
  64. => x->os-string)
  65. (else #f)))
  66. (define (lookup-environment-variable->string name)
  67. (cond
  68. ((lookup-environment-variable name)
  69. => os-string->string)
  70. (else #f)))
  71. (define (set-environment-variable! name value)
  72. (external-set-environment-variable! (x->os-byte-vector name)
  73. (x->os-byte-vector value)))
  74. (define (environment-alist)
  75. (map (lambda (pair)
  76. (cons (x->os-string (car pair))
  77. (x->os-string (cdr pair))))
  78. (external-environment-alist)))
  79. (define (environment-alist-as-strings)
  80. (map (lambda (pair)
  81. (cons (os-string->string (car pair))
  82. (os-string->string (cdr pair))))
  83. (environment-alist)))
  84. (import-lambda-definition-2 external-lookup-environment-variable (name) "posix_get_env")
  85. (import-lambda-definition-2 external-set-environment-variable! (name value) "posix_set_env")
  86. (import-lambda-definition-2 external-environment-alist () "posix_get_env_alist")
  87. ;----------------
  88. ; 4.7 Terminal Identification
  89. ; See io.scm.
  90. ;----------------
  91. ; 4.8 Configurable System Variables