getlogin.c 392 B

123456789101112131415161718192021222324252627
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <unistd.h>
  5. #include <sys/limits.h>
  6. char *
  7. getlogin_r(char *buf, int len)
  8. {
  9. int f, n;
  10. f = open("/dev/user", O_RDONLY);
  11. if(f < 0)
  12. return 0;
  13. n = read(f, buf, len);
  14. buf[len-1] = 0;
  15. close(f);
  16. return (n>=0)? buf : 0;
  17. }
  18. char *
  19. getlogin(void)
  20. {
  21. static char buf[NAME_MAX+1];
  22. return getlogin_r(buf, sizeof buf);
  23. }