AUSAM/source/S/touch.c
#include <stdio.h>
#include <stat.h>
main(argc, argv)
int argc;
char *argv[];
{
register int i;
register int force = 1;
for(i = 1; i < argc; ++i)
if(strcmp(argv[i], "-c"))
touch(force, argv[i]);
else
force = 0;
}
touch(force, name)
register int force;
register char *name;
{
struct statb stbuff;
char junk[1];
register 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.i_size1 == 0) && (stbuff.i_size0 == 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);
}