|
|
1.1 ! root 1: /* newer.c - exit with status 1 if first arg is newer than second, ! 2: else exit with status 0 ! 3: -v option gives verbose response to stdout ! 4: */ ! 5: ! 6: #include <fcntl.h> ! 7: #include <stdio.h> ! 8: #include <sys/stat.h> ! 9: ! 10: main(argc, argv) ! 11: int argc; ! 12: char * argv[]; ! 13: { ! 14: int fd1, fd2; ! 15: int argn, verbose = 0; ! 16: struct stat s1, s2; ! 17: ! 18: if (argc < 3 || argc > 4) { ! 19: fprintf(stderr, "Usage: %s [-v] file1 file2\n", argv[0]); ! 20: exit(2); ! 21: } ! 22: argn = 1; ! 23: ! 24: if (argc == 4) { ! 25: if (strcmp(argv[1], "-v")) { ! 26: fprintf(stderr, "Usage: %s [-v] file1 file2\n", argv[0]); ! 27: exit(2); ! 28: } else { ! 29: verbose = 1; ! 30: argn++; ! 31: } ! 32: } ! 33: ! 34: if ((fd1 = open(argv[argn], O_RDONLY)) < 0) { ! 35: if (verbose) ! 36: fprintf(stderr, "%s: can't open file %s\n", ! 37: argv[0], argv[argn]); ! 38: exit(2); ! 39: } ! 40: ! 41: if (fstat(fd1, &s1) < 0) { ! 42: if (verbose) ! 43: fprintf(stderr, "%s: can't stat file %s\n", ! 44: argv[0], argv[argn]); ! 45: exit(2); ! 46: } ! 47: ! 48: argn++; ! 49: if ((fd2 = open(argv[argn], O_RDONLY)) < 0) { ! 50: if (verbose) ! 51: fprintf(stderr, "%s: can't open file %s\n", ! 52: argv[0], argv[argn]); ! 53: exit(2); ! 54: } ! 55: ! 56: if (fstat(fd2, &s2) < 0) { ! 57: if (verbose) ! 58: fprintf(stderr, "%s: can't stat file %s\n", ! 59: argv[0], argv[argn]); ! 60: exit(2); ! 61: } ! 62: ! 63: close(fd1); ! 64: close(fd2); ! 65: ! 66: if (s1.st_mtime > s2.st_mtime) { ! 67: if (verbose) ! 68: printf("%s is newer than %s\n", ! 69: argv[argn-1], argv[argn]); ! 70: exit (0); ! 71: } else { ! 72: if (verbose) ! 73: printf("%s is NOT newer than %s\n", ! 74: argv[argn-1], argv[argn]); ! 75: exit (1); ! 76: } ! 77: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.