小编Tyl*_*ler的帖子

目录何时停止作为文件可读?

我有 Unix 编程环境书的第一版。在第 2 章中,作者声明目录作为文件是可读的,并提到了有关这些文件格式的一些事实。他们给出了一些使用示例,例如cat .(在练习 2-2 中)。

至少在 Darwin 中,目录不再作为文件可读。至少,它们在读取时看起来是零长度文件。

这个变化是什么时候发生的,有没有关于它的官方文档?

filesystems directory files

31
推荐指数
1
解决办法
1839
查看次数

为什么 cat x >> x 循环?

以下 bash 命令进入无限循环:

$ echo hi > x
$ cat x >> x
Run Code Online (Sandbox Code Playgroud)

我可以猜测它在开始写入标准输出后会cat继续读取x。然而,令人困惑的是,我自己的 cat 测试实现表现出不同的行为:

// mycat.c
#include <stdio.h>

int main(int argc, char **argv) {
  FILE *f = fopen(argv[1], "rb");
  char buf[4096];
  int num_read;
  while ((num_read = fread(buf, 1, 4096, f))) {
    fwrite(buf, 1, num_read, stdout);
    fflush(stdout);
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我运行:

$ make mycat
$ echo hi > x
$ ./mycat x >> x
Run Code Online (Sandbox Code Playgroud)

不是循环。鉴于在再次调用之前cat我正在刷新的行为和事实,我希望这个 C 代码能够在一个循环中继续读取和写入。stdoutfread

这两种行为如何一致?什么机制解释了为什么 …

shell io-redirection files cat

18
推荐指数
1
解决办法
2078
查看次数

read、head -1 和 sed 1q 之间有区别吗?

以下命令似乎大致等效:

read varname
varname=$(head -1)
varname=$(sed 1q)
Run Code Online (Sandbox Code Playgroud)

一个区别是,read是内置,而壳headsed都没有。

除此之外,三者在行为上有什么不同吗?

我的动机是更好地理解 shell 和关键实用程序(如head,sed. 例如,如果 usinghead是 的简单替代品read,那么为什么它read作为内置函数存在?

shell bash sed head read

8
推荐指数
3
解决办法
1万
查看次数

标签 统计

files ×2

shell ×2

bash ×1

cat ×1

directory ×1

filesystems ×1

head ×1

io-redirection ×1

read ×1

sed ×1