#include <9pm/u.h> #include <9pm/libc.h> int touch(int, char *); void main(int argc, char **argv) { int nocreate = 0; int status = 0; ARGBEGIN{ case 'c': nocreate = 1; break; default: goto usage; break; }ARGEND if(!*argv){ usage: fprint(2, "usage: touch [-c] files\n"); exits("usage"); } while(*argv) status += touch(nocreate, *argv++); if(status) exits("touch"); exits(0); } touch(int nocreate, char *name) { Dir stbuff; int fd; nulldir(&stbuff); stbuff.mtime = time(0); if(dirwstat(name, &stbuff) >= 0) return 0; if(nocreate){ fprint(2, "touch: %s: cannot wstat: %r\n", name); return 1; } if ((fd = create(name, OREAD, 0666)) < 0) { fprint(2, "touch: %s: cannot create: %r\n", name); return 1; } close(fd); return 0; }