touch: posix open

This commit is contained in:
Connor Lane Smith 2011-06-18 06:43:10 +01:00
parent 8ec404cdec
commit 444de72fd3
2 changed files with 17 additions and 13 deletions

3
kill.1
View File

@ -25,4 +25,5 @@ lists available signals. If a
.I signum .I signum
is given, only the corresponding signal name will be printed. is given, only the corresponding signal name will be printed.
.SH SEE ALSO .SH SEE ALSO
.IR kill (2) .IR kill (2),
.IR signal (7)

21
touch.c
View File

@ -43,17 +43,20 @@ touch(const char *str)
struct stat st; struct stat st;
struct utimbuf ut; struct utimbuf ut;
if(stat(str, &st) == -1) { if(stat(str, &st) == 0) {
if(errno != ENOENT)
eprintf("stat %s:", str);
if(cflag)
return;
if((fd = creat(str, O_EXCL|S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)) < 0)
eprintf("creat %s:", str);
close(fd);
}
ut.actime = st.st_atime; ut.actime = st.st_atime;
ut.modtime = t; ut.modtime = t;
if(utime(str, &ut) == -1) if(utime(str, &ut) == -1)
eprintf("utime %s:", str); eprintf("utime %s:", str);
return;
}
else if(errno != ENOENT)
eprintf("stat %s:", str);
else if(cflag)
return;
if((fd = open(str, O_CREAT|O_EXCL,
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)) == -1)
eprintf("open %s:", str);
close(fd);
touch(str);
} }