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;
。。。。。。。
我认为这种情况是由于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指令,为何提示:不是内部或外部命令,也不是可运行的程序