我需要做一个
sort big-file | uniq > big-file.temp
通过系统从 C 程序调用。 文件系统满了会报错吗?
如果 man 2“write”不能写入所有数据,它只返回 0,但是/dev/null 总是返回 0 并且 bash 在管道输入时没有报告错误,所以我想我不会收到错误通知。
最佳答案
如果磁盘已满,uniq
将在写入标准输出时出现错误,然后它应该以非零退出代码退出。 system()
的返回值是管道中最后一个命令的终止状态。因此,如果命令成功,system()
将返回 0
,如果命令不成功,它将返回一些非零值。
所以你可以这样做:
ret = system('sort big-file | uniq > big-file.temp');
if (ret != 0) {
fprintf(stderr, "Sorting failed!\n");
exit(1);
}
顺便说一句,sort
有一个 -u
选项来生成唯一的结果,这可能比对所有内容进行排序然后通过管道传输到 uniq
更有效。
关于linux - 检测 shell 重定向命令是否用完磁盘空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25791769/