我需要将输出重定向到具有>
外壳程序的文件,但是如果该文件尚不存在,则不应创建该文件。如何实现呢?
我尝试通过创建一个指向文件的符号链接并重定向到该符号链接来进行尝试,但是很遗憾,无论如何该文件都是创建的(如果尚不存在)。
可能我需要重定向到执行检查的单独程序,而不是shell。有人知道一个程序可以做到这一点吗?
注意我需要它在OpenWrt中工作(即使用busybox
的实用程序版本)。
以下对我有用:
/* Printer device file must not be created if it does not
already exist. This is similar to `cat >', but open()
syscall is without O_CREAT. */
#include <fcntl.h> /* |open| */
#include <stdio.h> /* |fprintf| */
#include <unistd.h> /* |read| */
int main(int argc, char **argv)
{
int fd;
if ((fd = open(argv[1], O_WRONLY)) == -1) {
fprintf(stderr, "open: %m\n");
return 0;
}
char buf[8192];
ssize_t n, m;
while((n = read(0, buf, sizeof buf)) > 0) {
m = write(fd, buf, n);
if (m == -1) {
fprintf(stderr, "write: %m\n");
break;
}
if (m != n) {
fprintf(stderr, "TODO: stuff all bytes in a loop\n");
break;
}
}
if (n == -1) fprintf(stderr, "read: %m\n");
close(fd);
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句