|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <sys/types.h> ! 3: #include <sys/stat.h> ! 4: ! 5: long lseek(); ! 6: ! 7: main(argc,argv) ! 8: int argc; ! 9: char *argv[]; ! 10: { ! 11: int i; ! 12: static int force = 1; ! 13: int status = 0; ! 14: ! 15: if (argc < 2) { ! 16: fprintf(stderr, "usage: touch files\n"); ! 17: exit(1); ! 18: } ! 19: for(i = 1; i < argc; ++i) ! 20: if (strcmp(argv[i], "-c") == 0) ! 21: force = 0; ! 22: else ! 23: status += touch(force, argv[i]); ! 24: exit(status); ! 25: } ! 26: ! 27: touch(force, name) ! 28: int force; ! 29: char *name; ! 30: { ! 31: struct stat stbuff; ! 32: char junk[1]; ! 33: int fd; ! 34: ! 35: stbuff.st_size = 0; ! 36: if (stat(name,&stbuff) < 0 && force == 0) { ! 37: fprintf(stderr, "touch: %s: cannot stat\n", name); ! 38: return (1); ! 39: } ! 40: if (stbuff.st_size == 0) { ! 41: if ((fd = creat(name, 0666)) < 0) { ! 42: fprintf(stderr, "touch: %s: cannot create\n", name); ! 43: return (1); ! 44: } ! 45: close(fd); ! 46: return (0); ! 47: } ! 48: if ((fd = open(name, 2)) < 0) { ! 49: fprintf(stderr, "touch: %s: cannot open\n", name); ! 50: return (1); ! 51: } ! 52: if(read(fd, junk, 1) < 1) { ! 53: fprintf(stderr, "touch: %s: read error\n", name); ! 54: close(fd); ! 55: return (1); ! 56: } ! 57: lseek(fd, 0L, 0); ! 58: if(write(fd, junk, 1) < 1 ) { ! 59: fprintf(stderr, "touch: %s: write error\n", name); ! 60: close(fd); ! 61: return (1); ! 62: } ! 63: close(fd); ! 64: return (0); ! 65: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.