shell, 控制台,stdin-stdout之间是什么关系?

csdmdsc 2012-07-30 10:43:08
以前没有想过这个问题,但是碰到了下面这个程序:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
pid_t pid;
char *message;
int n;

printf("Fork program starting\n");
pid = fork();

switch(pid)
{
case -1:
perror("fork failed");
exit(-1);
case 0:
message = "This is the child";
n = 5;
break;
default:
message = "This is the parent";
n = 3;
break;

}
for(; n > 0; n --)
{
puts(message);
sleep(1);
}

exit(0);
}

现在就我的理解:shell在系统级别跟一般的用户程序一样都是利用控制台与用户进行交互,但是它主要负责启动用户需要的程序,shell会等待启动后的程序(shell的子进程)完成。所有的程序的标准输入输出都映射到控制台。控制台只是一个输入和输出的工具。从来都是在X下用linux的,各种封装和抽象把原来的东西弄的很模糊。

感觉这里面的关系好乱,请解惑,详细的说说。
...全文
436 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dy20082250123 2013-10-10
  • 打赏
  • 举报
回复
引用 3 楼 cao_julians 的回复:
终端是人机交互的硬件设备,笔记本、台式机将键盘和显示器作为标准终端----统称console(控制台--从人的角度去看). 从计算机内的角度去看,不论是设备还是文件,管理起来是一样的,则将标准终端直接命名了stdin,stdout,stderr,其它的设备、文件往往要程序员自己命名。 如果你用过文件读写,下面的代码不会陌生: FILE *fp; fp=fopen(文件名,打开方式);//fp可以理解为对“文件名”的命名 。。。 fprintf(fp,"格式控制",输出内容); 如果你用stdout代替fp,就会发现向fp指向文件输出的内容改为向标准输出设备(显示器)输出了 而shell则是操作系统中完成人机交互的软件,它依靠终端完成“接收”人向计算机发出的命令,“反馈”计算机向人传送了信息。
哥们的讲解对我很有帮助,thanks!
wjb_yd 2012-08-06
  • 打赏
  • 举报
回复
shell就是系统自带的一个人机交互系统软件。 控制台可以理解成一个本机/远程的shell。

stdin和stdout是进程创建时,操作系统帮你默认打开的两个文件描述符。
cao_julians 2012-08-06
  • 打赏
  • 举报
回复
终端是人机交互的硬件设备,笔记本、台式机将键盘和显示器作为标准终端----统称console(控制台--从人的角度去看).
从计算机内的角度去看,不论是设备还是文件,管理起来是一样的,则将标准终端直接命名了stdin,stdout,stderr,其它的设备、文件往往要程序员自己命名。
如果你用过文件读写,下面的代码不会陌生:
FILE *fp;
fp=fopen(文件名,打开方式);//fp可以理解为对“文件名”的命名
。。。
fprintf(fp,"格式控制",输出内容);
如果你用stdout代替fp,就会发现向fp指向文件输出的内容改为向标准输出设备(显示器)输出了
而shell则是操作系统中完成人机交互的软件,它依靠终端完成“接收”人向计算机发出的命令,“反馈”计算机向人传送了信息。
csdmdsc 2012-08-06
  • 打赏
  • 举报
回复
Hello world!
linuxblack125125 2012-08-04
  • 打赏
  • 举报
回复
我的理解:控制终端是集输入、输出和显示(用于输入、输出的面板)为一体的一个进程,它将用户的输入交给shell去执行,shell 是连接用户和内核的一个通道,执行完的输出又由shell交给控制终端显示。不知道对不对?希望有高人出来指点。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧