linux - 检测 shell 重定向命令是否用完磁盘空间?

标签 linux sh

我需要做一个

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/

相关文章:

linux - 我用 0 初始化数组时做错了什么?

shell - 如何在 shell 脚本中解析配置文件 (*.conf)?

linux - 使用文件时列出文件 - Shell Linux

linux - Bash sizeout 脚本

c - 当以 0 超时调用时,poll() ingores 传入数据

python - 从 python 异常中杀死 Bash 脚本

linux - 从文件中读取字符串并使用 bash 将它们存储在多个变量中

bash - Busybox sh 不会执行 bash 脚本

C++/QT/ARM 处理器交叉编译/编程

php - 尝试读取 QuickTime 文件章节元数据