+#include <stdio.h>
+
+
+main(argc,argv)
+int argc;
+char *argv[];
+{
+int i;
+static int force = 1;
+
+for(i = 1 ; i < argc ; ++i)
+ if( strcmp(argv[i], "-c") )
+ touch(force, argv[i]);
+ else
+ force = 0;
+}
+
+
+
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+
+touch(force, name)
+int force;
+char *name;
+{
+struct stat stbuff;
+char junk[1];
+int fd;
+
+if( stat(name,&stbuff) < 0)
+ if(force)
+ goto create;
+ else
+ {
+ fprintf(stderr, "touch: file %s does not exist.\n", name);
+ return;
+ }
+
+if(stbuff.st_size == 0)
+ goto create;
+
+if( (fd = open(name, 2)) < 0)
+ goto bad;
+
+if( read(fd, junk, 1) < 1)
+ {
+ close(fd);
+ goto bad;
+ }
+lseek(fd, 0L, 0);
+if( write(fd, junk, 1) < 1 )
+ {
+ close(fd);
+ goto bad;
+ }
+close(fd);
+return;
+
+bad:
+ fprintf(stderr, "Cannot touch %s\n", name);
+ return;
+
+create:
+ if( (fd = creat(name, 0666)) < 0)
+ goto bad;
+ close(fd);
+}