回答
cat
本身,没有。它读取输入流,直到告诉它是文件的结尾,如果需要的话阻塞输入。
没有什么可以阻止你写你自己的cat
相当于将使用select
标准输入超时,如果没有足够快即将到来,并退出在这些条件下。
事实上,我曾经写过一个snail
程序(因为蜗牛比猫慢),它每秒钟额外增加一个字符参数来缓慢输出文件(a)。
所以snail 10 myprog.c
将以每秒10个字符输出myprog.c
。对于我的生活,我不记得我为什么这样做 - 我怀疑我只是在闲逛,等待一些真正的工作出现。
既然你用起来麻烦,这里有dog.c
一个版本(根据我前面提到的snail
程序),将你想要做什么:
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/select.h>
static int dofile (FILE *fin) {
int ch = ~EOF, rc;
fd_set fds;
struct timeval tv;
while (ch != EOF) {
// Set up for fin file, 5 second timeout.
FD_ZERO (&fds); FD_SET (fileno (fin), &fds);
tv.tv_sec = 5; tv.tv_usec = 0;
rc = select (fileno(fin)+1, &fds, NULL, NULL, &tv);
if (rc < 0) {
fprintf (stderr, "*** Error on select (%d)\n", errno);
return 1;
}
if (rc == 0) {
fprintf (stderr, "*** Timeout on select\n");
break;
}
// Data available, so it will not block.
if ((ch = fgetc (fin)) != EOF) putchar (ch);
}
return 0;
}
int main (int argc, char *argv[]) {
int argp, rc;
FILE *fin;
if (argc == 1)
rc = dofile (stdin);
else {
argp = 1;
while (argp < argc) {
if ((fin = fopen (argv[argp], "rb")) == NULL) {
fprintf (stderr, "*** Cannot open input file [%s] (%d)\n",
argv[argp], errno);
return 1;
}
rc = dofile (fin);
fclose (fin);
if (rc != 0)
break;
argp++;
}
}
return rc;
}
然后,你可以简单地运行dog
不带参数的(所以它会使用标准输入),五秒钟后没有活动,它会输出:
*** Timeout on select
(一)事实上,它被称为slowcat
但snail
是好得多,我不是有点轻微修正主义的上面,如果它使故事听起来更好:-)
这里是超时猫代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void timeout(int sig) {
exit(EXIT_FAILURE);
}
int main(int argc, char* argv[]) {
int sec = 0; /* seconds to timeout (0 = no timeout) */
int c;
if (argc > 1) {
sec = atoi(argv[1]);
signal(SIGALRM, timeout);
alarm(sec);
}
while((c = getchar()) != EOF) {
alarm(0);
putchar(c);
alarm(sec);
}
return EXIT_SUCCESS;
}
它确实基本相同paxdiablo的狗。 它可以作为一个cat
没有参数 - catting标准输入。作为第一个参数提供超时秒数。
一个限制(适用于狗也一样) - 行是行缓冲,让你有正秒提供线(未任何字符)复位超时报警。这是因为readline。
使用:
,而不是潜在不已:
cat <some_input> some_output
你可以做编译上面timeout_cat代码:
./timeout_cat 5 <some_input> some_output
尽量考虑尾-f --pid 我假设你正在读一些文件,当制片人完成(走了?)你停止。
将处理/ var/log/messages直到watcher.sh完成的示例。
./watcher.sh&
tail -f /var/log/messages --pid $! | ... do something with the output
尼斯。不幸的是它不在我的尾巴上。我希望它只是Gnu。 – dubiousjim
只需猫,然后在5秒后杀死猫。
cat xyz & sleep 5; kill $!
获取猫输出作为回复5秒
reply="`cat xyz & sleep 5; kill $!`"
echo "reply=$reply"
mbuffer
后,以其-W
的选择,为我工作。
我需要沉stdin
到一个文件,但有一个空闲超时:
- 我并不需要真正连接多个源
- (但也许有办法使用
mbuffer
这一点。)我不需要任何cat
可能的输出格式选项。 - 我不介意
mbuffer
带来的进度条。
根据链接手册页中的建议,我确实需要添加-A /bin/false
来抑制警告。我的复制stdin
到10秒的空闲超时文件的调用最终看起来像
mbuffer -A /bin/false -W 10 -o ./the-output-file
- 1. 阅读大型数据集大熊猫
- 2. 缓冲阅读器没有从套接字接收数据
- 3. 为什么我收不到收据或阅读收据?
- 4. 在Arduino中结合RFID阅读器接收USB串行数据
- 5. 阅读器不读数据库值
- 6. 阅读串口硬币接收器
- 7. EOF阅读数据包 - 连接失败
- 8. 阅读grib2数据
- 9. 阅读excel数据
- 10. 阅读Json数据
- 11. 阅读firebase数据
- 12. 熊猫阅读.csv文件
- 13. 熊猫阅读从dataframe.to_string
- 14. 熊猫阅读嵌套JSON
- 15. 从USB-GPS接收器读取数据
- 16. 阅读使用熊猫和python数据的重复块
- 17. 阅读网址为熊猫数据框与列名(python3)
- 18. 熊猫:如何阅读错误的时间数据?
- 19. 从Adwords下载数据并使用熊猫阅读文件
- 20. 阅读CSV与大熊猫有这种数据集
- 21. 阅读并执行到熊猫数据框的SQL查询
- 22. 在大熊猫阅读器中创建新的数据库
- 23. jQuery.get不接收数据
- 24. Linux 2.6.23。接收错误。阅读函数返回-1
- 25. 阅读接触
- 26. 阅读链接
- 27. 阅读不一致的数据
- 28. 阅读多部分/表格数据,而不接触磁盘
- 29. 阅读Gmail收件箱
- 30. 阅读收件人MFMailComposer
你不只是在寻找'read'吗? – Wrikken
我可以读取管道吗? – Kai
cat $ fifo |而nc ... – Kai