main.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <fcntl.h>
  4. #include <sys/stat.h>
  5. #include <unistd.h>
  6. #include <string.h>
  7. #include <sys/syscall.h>
  8. #define TEST_DIR "test_dir"
  9. #define TEST_FILE "test_file"
  10. void create_test_files() {
  11. mkdir(TEST_DIR, 0755);
  12. int fd = open(TEST_FILE, O_CREAT | O_RDWR, 0644);
  13. if (fd >= 0) close(fd);
  14. }
  15. void cleanup_test_files() {
  16. unlink(TEST_FILE);
  17. rmdir(TEST_DIR);
  18. }
  19. void run_test(const char *name, int (*test_func)(), int expected) {
  20. printf("Testing %s... ", name);
  21. int result = test_func();
  22. if (result == expected) {
  23. printf("[PASS]\n");
  24. } else {
  25. printf("[FAILED] (expected %d, got %d)\n", expected, result);
  26. }
  27. }
  28. int test_normal_file() {
  29. struct stat st;
  30. return syscall(__NR_newfstatat, AT_FDCWD, TEST_FILE, &st, 0);
  31. }
  32. int test_directory() {
  33. struct stat st;
  34. return syscall(__NR_newfstatat, AT_FDCWD, TEST_DIR, &st, 0);
  35. }
  36. int test_invalid_fd() {
  37. struct stat st;
  38. return syscall(__NR_newfstatat, -1, TEST_FILE, &st, 0);
  39. }
  40. int test_nonexistent_path() {
  41. struct stat st;
  42. return syscall(__NR_newfstatat, AT_FDCWD, "nonexistent_file", &st, 0);
  43. }
  44. int main() {
  45. create_test_files();
  46. run_test("normal file stat", test_normal_file, 0);
  47. run_test("directory stat", test_directory, 0);
  48. run_test("invalid file descriptor", test_invalid_fd, -1);
  49. run_test("nonexistent path", test_nonexistent_path, -1);
  50. cleanup_test_files();
  51. return 0;
  52. }