|
|
1.1 ! root 1: /* @(#)open-unlk.c 1.2 90/01/03 NFS Rev 2 Testsuite ! 2: * 1.3 Lachman ONC Test Suite source ! 3: * ! 4: * tests operation on open file which has been unlinked. ! 5: * steps taken: ! 6: * 1. create file ! 7: * 2. open for read/write ! 8: * 3. unlink file ! 9: * 4. write data ! 10: * 5. rewind ! 11: * 6. read data back ! 12: */ ! 13: ! 14: #include <stdio.h> ! 15: #ifdef SVR3 ! 16: #include <fcntl.h> ! 17: #else ! 18: #include <sys/file.h> ! 19: #endif ! 20: #include <errno.h> ! 21: extern errno; ! 22: #define TBUFSIZ 100 ! 23: char wbuf[TBUFSIZ], rbuf[TBUFSIZ]; ! 24: #define TMSG "This is a test message written to the unlinked file\n" ! 25: ! 26: main(argc, argv) ! 27: int argc; ! 28: char *argv[]; ! 29: { ! 30: int fd, ret; ! 31: char *tname = "nfstestXXXXXX"; ! 32: int errcount = 0; ! 33: long lret; ! 34: extern long lseek(); ! 35: ! 36: setbuf(stdout, NULL); ! 37: mktemp(tname); ! 38: #ifdef O_RDWR ! 39: if ((fd = open(tname, O_CREAT|O_TRUNC|O_RDWR, 0777)) < 0) { ! 40: fprintf(stderr, "can't create %s: ", tname); ! 41: xxit("open"); ! 42: } ! 43: #else ! 44: if ((fd = creat(tname, 0777)) < 0) { ! 45: fprintf(stderr, "can't create %s: ", tname); ! 46: xxit("creat"); ! 47: } ! 48: close(fd); ! 49: if ((fd = open(tname, 2)) < 0) { ! 50: fprintf(stderr, "can't reopen %s: ", tname); ! 51: unlink(tname); ! 52: xxit("open"); ! 53: } ! 54: #endif /* O_RDWR */ ! 55: printf("nfsjunk files before unlink:\n "); ! 56: system("ls -al .nfs*"); ! 57: ret = unlink(tname); ! 58: printf("%s open; unlink ret = %d\n", tname, ret); ! 59: if (ret) ! 60: xxit(" unlink"); ! 61: printf("nfsjunk files after unlink:\n "); ! 62: system("ls -al .nfs*"); ! 63: strcpy(wbuf, TMSG); ! 64: if ((ret = write(fd, wbuf, TBUFSIZ)) != TBUFSIZ) { ! 65: fprintf(stderr, "write ret %d; expected %d\n", ret, TBUFSIZ); ! 66: if (ret < 0) ! 67: perror(" write"); ! 68: exit(1); ! 69: } ! 70: if ((lret = lseek(fd, 0L, 0)) != 0L) { ! 71: fprintf(stderr, "lseek ret %ld; expected 0\n", lret); ! 72: if (lret < 0) ! 73: perror(" lseek"); ! 74: exit(1); ! 75: } ! 76: if ((ret = read(fd, rbuf, TBUFSIZ)) != TBUFSIZ) { ! 77: fprintf(stderr, "read ret %d; expected %d\n", ret, TBUFSIZ); ! 78: if (ret < 0) ! 79: perror(" read"); ! 80: exit(1); ! 81: } ! 82: if (strcmp(wbuf, rbuf) != NULL) { ! 83: errcount++; ! 84: printf("read data not same as written data\n"); ! 85: printf(" written: '%s'\n read: '%s'\n", wbuf, rbuf); ! 86: } else { ! 87: printf("data compare ok\n"); ! 88: } ! 89: ! 90: if (unlink(tname) == 0) { ! 91: errcount++; ! 92: printf("Error: second unlink succeeded!??\n"); ! 93: } else if (errno != ENOENT) { ! 94: errcount++; ! 95: perror("unexpected error on second unlink"); ! 96: } ! 97: ! 98: if (ret = close(fd)) { ! 99: errcount++; ! 100: perror("error on close"); ! 101: } ! 102: ! 103: printf("nfsjunk files after close:\n "); ! 104: system("ls -al .nfs*"); ! 105: ! 106: if ((ret = close(fd)) == 0) { ! 107: errcount++; ! 108: fprintf(stderr, "second close didn't return error!??\n"); ! 109: } ! 110: ! 111: if (errcount == 0) ! 112: printf("test completed successfully.\n"); ! 113: exit(errcount); ! 114: } ! 115: ! 116: xxit(s) ! 117: char *s; ! 118: { ! 119: perror(s); ! 120: exit(1); ! 121: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.