bash直接执行溢出字符

bash directly executes overflown characters

我在尝试 C 读取函数时遇到了一些奇怪的事情。我知道文件描述符 0 表示标准输入。所以我决定使用如下所示的读取功能进行输入

 #include<unistd.h>
 int main(){
   char buf[1];
   read(0,buf,1);
   return 0;
 }

我用 gcc

编译了 main.c 文件
$ gcc -o main main.c

然后我执行了main二进制然后输入了'tls'。 't' 之后的字符由 shell 解释,输出如下

$ ./main
  tls
$ ls
  main main.c 

为什么shell直接解释溢出的输入字符?

什么都没有溢出。您的程序从 stdin 读取一个字符,然后退出。之后的任何字符都由 shell.

读取