LINUX中此程序运行后,为何刷新不出命令提示符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINUX中此程序运行后,为何刷新不出命令提示符?相关的知识,希望对你有一定的参考价值。

1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <string.h>
5 #include <errno.h>
6 #include <sys/wait.h>
7
8 int main()
9
10 pid_t pid;
11 int fd[2],ret;
12 pipe(fd);
13
14 pid = fork();
15
16 if(pid < 0)
17 perror("fork");
18 exit(1);
19
20
21 if(pid > 0)
22 close(fd[0]);
23 dup2(fd[1],STDOUT_FILENO);
24 execlp("ls","ls",NULL);
25 pid = wait(NULL);
26 fflush(stdin);
27 close(fd[1]);
28 else
29 close(fd[1]);
30 dup2(fd[0],STDIN_FILENO);
31 execlp("wc","wc","-l",NULL);
32 close(fd[0]);
33
34
35 return 0;
36

以上编译运行后,不会自动显示命令提示符,必须回车一下才能刷新出来
这是为什么呢
请忽略那个fflush(stdin);

还有close;
。。。。。。。

很遗憾,在我的centos6测试系统中,输入你的程序编译运行后,会直接显示命令行提示符,不需要回车一下。

我认为这种情况是由于shell处理子进程的方式不同而引起的,研究这种原因大部分时间不如研究茴香豆的茴字有几种写法有意义。

如过你想找到原因,我认为可以在你的环境里面,逐步的删除你程序中一些不影响结果的行,然后调整运行方式(比如说,不要用close,不要wait等)再试试看吧
参考技术A else
29 close(fd[1]);
30 dup2(fd[0],STDIN_FILENO);
31 execlp("wc","wc","-l",NULL);
32 close(fd[0]);
exit(0); //这里加上这个试一下,不确定是否可行
33

if(pid > 0)
22 close(fd[0]);
23 dup2(fd[1],STDOUT_FILENO);
24 execlp("ls","ls",NULL);
25 pid = wait(NULL);
26 fflush(stdout); //这里也改一下
27 close(fd[1]);本回答被提问者采纳
参考技术B 很遗憾,在我的centos6测试系统中,输入你的程序编译运行后,会直接显示命令行提示符,不需要回车一下。

Linux 124课程 1 访问命令行

一、命令行简介
  命令行是基于文本的界面,可用于向计算机系统输入指令。Linux 命令行由名为shell的程序提供。

  普通用户启用shell时,默认提示符结尾是$
  超级用户root运行shell,提示符结尾是#

计算机 硬件(cpu、内存、硬盘、主板)
内核 (让硬件高效运行,并管理)
应用程序

Shell 是解释器 :将应用程序命令转换成内核可以识别的东西,让计算机运行
Shell 是应用程序和内核之间的桥梁

1、Shell 类型有很多
cat /etc/shells 查看系统可以支持哪些shell
echo $shell 查看系统默认的shell
/bin/bash 默认为bash shell

2、Shell 命令 分类:
  内部命令 内核自带的命令
  type cd
  cd is a shell builtin
  外部命令 安装了软件以后,软件自带的命令
  如 type mkdir
  mkdir is /user/bin/mkdir

3、选项
  (1)短选项 ls - color /etc/ 表示有多选项 -c -o -l -r
  (2)长选项 ls -- color /etc/ 表示一个选项 颜色

二、登录到操作系统
1、登录到操作系统指令
  Ctrl+Alt F2--F6 切换到命令行虚拟终端
  Ctrl+Alt F1 切换到GNOME 图形化界面
  
  Ctrl+D或exit命令关闭当前的terminal窗口
  Ctrl+Shift+t 新建terminal窗口
  
注意 :在Linux中严格区分大小写
  
2、命令格式

 ls           -l        /etc/                
命令   选项       参数

注意: 命令,必须要有
   选项、参数可以互换位置

3、file 显示文件类型
  file 命令查看文件类型
  普通文件 [-] 文件
  目录 [d] 文件夹
  字符文件 [c] 比如:键盘文件 鼠标文件
  块设备文件 [b] 比如:硬盘文件
  套接字文件 [s] 比如: /var/run 应用的数据接口
  链接文件 [l] 快捷方式
  管道文件 [p] 用于解决多个程序同时访问一个文件所造成的错误

三、常见的命令
(1)passwd 设置密码
-d --delete 删除用户密码
-l --lock 锁定用户的密码
-u --unlock 解锁用户的密码
-e --expire 设置用户密码超期
-S --status 查看用户的密码状态
--stdin 采用标准输入设置密码

(2)date 用于显示日期和时间
date --help
  
  date +%D
  date +%Y/%m/%d
  date +%X
  
  编辑Shell 脚本的时候会使用到date相关参数
  date “+%Y/%m/%d %H:%M:%S”

(3)查看文件内容
  head 文件 默认看见文件头十行
  head -3 文件
  
  tail 文件 默认看文件尾十行
  tail -f 动态查看文件内容,通常用来查看日志文件的变化情况
  
  日志文件 /var/log/message
  tail -f /var/log/message
  
  cat 全部显示, 比较合适查看小文件
  more 一部分一部分的显示,只能往下翻,不能往回翻
  less 上下翻动,结束查看按q推出
  
(4)wc 统计文件
  wc 文件
  -c 字节数
  -l 行数
  -w 单词数
  
(5)history 命令的历史记录
  !59 调用历史记录中的第59条命令
  !wc 从下往上找,找最近一次wc的命令

   ctrl+ R 查找历史命令

  Esc+. 自动调用上一命令的参数

(6)快捷键的使用
  Ctrl + a 将光标快速定位到行首
  Ctrl + e 将光标快速定位到行尾
  Ctrl + u 删除光标前的所有内容
  Ctrl + k 删除光标后的所有内容
  Ctrl + c 取消命令
  Ctrl + w 删除光标前的一个单词
  
  
whatis passwd 这个命令有什么作用
pssswd --help 查看命令如何使用
man passwd

  
练习 :
(1)修改student 密码为123
(2)锁定student 密码
(3)按要求显示日期和时间”YYYY-MM-DD HH:MM:SS”
(4)查看/etc/passwd 文件 有多少行
(5)查看/etc/passwd 的文件类型
(6)显示/etc/passwd 文件的前五行

以上是关于LINUX中此程序运行后,为何刷新不出命令提示符?的主要内容,如果未能解决你的问题,请参考以下文章

dos下 输入telnet指令,为何提示:不是内部或外部命令,也不是可运行的程序

我的电脑为何新建的文件必须刷新后才显示

nohup执行后退出终端为何进程消失?急

请问:在DOS系统中输入命令:Type 文件名.exe后屏幕上为何出现一堆乱码?

linux打不出中文怎么办

Linux学习——001