cmd实现hello,world!

本文介绍了Java的优势,如简单性、面向对象和可移植性,并详细讲解了JDK、JRE和JVM的区别。此外,还阐述了如何卸载和安装JDK,以及配置环境变量的过程。通过编写HelloWorld程序,读者可以实践Java开发的基础步骤,并了解可能遇到的问题及解决方案。

java的优势

简单性

面向对象

可移植性 write once run anywhere

高性能

分布式 UML

动态性 反射机制

多线程

安全性

健壮性

JAVA的成功

三大版本

javaSE便准版 (桌面程序 控制台开发)

javaME嵌入式开发(手机 小家电)

javaEE E企业级开发 (web端 服务器开发)

JDK JRE JVM

在这里插入图片描述
在这里插入图片描述

卸载JDK

电脑—属性—高级系统变量—环境变量—系统变量—找到javahome文件的位置并删除—path里面的关于java的包也删除—打开cmd—验证

  1. 删除java的安装目录

  2. 删除JAVA_HOME

  3. 删除path下关于java 的目录

  4. java-version

    安装JDK

  5. 百度搜索JDK8,找到下载地址

  6. 同意协议

  7. 下载电脑对应版本

  8. 双击安装

  9. 记住环境变量

  10. 配置环境变量

    1. 我的电脑—右键—属性
    2. 环境变量—JAVA_HOME
    3. 配置path变量
  11. 测试JDK是否安装成功

          1. 打开cmd
             2. java -version
    

HelloWorld

  1. 随便建立一个文件夹,存放代码
  2. 新建一个java文件
    • 文件后缀为.java
    • Hello.java
  3. 编写代码
public class Hello{
	public static void main(String[] args){
		System.out.print("Hello,world!");
	}
}
  1. 编译javac.java文件,会生成class文件

    javac报错是环境变量的问题

  2. 成功效果图
    在这里插入图片描述

可能遇到的情况

  1. 每个单词大小写不能出现问题 java是大小写敏感的
  2. 尽量使用英文
  3. 文件名跟类名要保持一致
  4. 符号使用了中文,分号否落下
  5. 环境变量是否有错

环境变量的设置

JAVA_HOME

这里的路径是JDK安装的路径
在这里插入图片描述

Path
在这里插入图片描述

classpath的设置

.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;

在这里插入图片描述

非常感谢你的澄清! 你真正的问题是: --- ## ❓ 问题描述 你输入了: ``` input>Hello World! ``` 然后按下回车,**终端显示了你输入的内容**: ``` input>Hello World! ``` 而你**期望的是只显示 `Hello World!`**,就像 `/bin/cat` 的标准行为那样。 --- ## ✅ 期望行为 你运行 `/bin/cat`,然后输入: ``` Hello World! ``` 你应该看到输出: ``` Hello World! ``` 而不是: ``` input>Hello World! Hello World! ``` --- ## 🧠 真正原因分析 ### ✅ 根本问题在于:**你输入的内容包含了提示符 `input>`,而你又把它写入了子进程的标准输入** 换句话说: - 你在终端输入了:`input>Hello World!`(包括 `input>`) - 程序把整个字符串(包括 `input>`)写入了管道 - 子进程执行 `/bin/cat`,它读到了完整的字符串 `input>Hello World!` - 所以它输出了 `input>Hello World!` --- ## 🔍 举个例子 如果你运行: ```bash /bin/cat ``` 然后你在终端输入: ``` input>Hello World! ``` 你看到输出: ``` input>Hello World! ``` 这说明你**把提示符 `input>` 当成了输入内容的一部分**,而程序并没有过滤它。 --- ## ✅ 正确的行为应该是: 1. 程序打印提示符 `input>`(仅提示作用) 2. 用户输入:`Hello World!` 3. 程序把 `Hello World!` 写入管道 4. 子进程读取并输出:`Hello World!` --- ## ✅ 解决方案 ### ✅ 问题定位:你把提示符和输入内容混在一起了 ### ✅ 修复方法: 1. **提示符只是提示,不能写入管道** 2. **只将用户输入的内容写入管道** --- ## 🛠️ 修改后的代码(重点修改提示符和输入分离) 我们只需修改输入部分的逻辑: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <signal.h> #include <errno.h> #define MAX_CMD_LEN 256 #define MAX_ARGS 16 pid_t child_pid = 0; void handle_stop(int sig) { (void)sig; if (child_pid != 0) { kill(child_pid, SIGTERM); waitpid(child_pid, NULL, 0); printf("命令进程已终止。\n"); child_pid = 0; } } int split_args(char *cmd, char **args) { int argc = 0; char *token = strtok(cmd, " "); while (token != NULL && argc < MAX_ARGS - 1) { args[argc++] = token; token = strtok(NULL, " "); } args[argc] = NULL; return argc; } int readline(char *buf, int buflen) { int i = 0; char c; while (i < buflen - 1) { ssize_t n = read(STDIN_FILENO, &c, 1); if (n <= 0) { if (errno == EINTR) continue; return -1; } if (c == '\n' || c == '\r') { buf[i] = '\0'; break; } buf[i++] = c; } buf[i] = '\0'; return i; } int main() { char cmd[MAX_CMD_LEN]; char input[MAX_CMD_LEN]; printf("简易 Shell 启动成功。请输入命令路径或 'exit' 退出。\n"); while (1) { int pipefd[2]; if (pipe(pipefd) == -1) { perror("pipe"); exit(EXIT_FAILURE); } printf("shell> "); fflush(stdout); if (readline(cmd, sizeof(cmd)) < 0) { break; } if (strcmp(cmd, "exit") == 0) { printf("退出简易 Shell。\n"); close(pipefd[0]); close(pipefd[1]); break; } child_pid = fork(); if (child_pid == -1) { perror("fork"); close(pipefd[0]); close(pipefd[1]); continue; } if (child_pid == 0) { dup2(pipefd[0], STDIN_FILENO); close(pipefd[0]); close(pipefd[1]); char *args[MAX_ARGS]; int argc = split_args(cmd, args); execv(args[0], args); perror("execv"); exit(EXIT_FAILURE); } else { close(pipefd[0]); signal(SIGINT, handle_stop); printf("子进程 PID: %d,正在运行命令: %s\n", child_pid, cmd); printf("您可以向命令输入内容,或输入 'stop' 终止它。\n"); while (1) { // 只打印提示符,不包含在输入内容中 printf("input> "); fflush(stdout); if (readline(input, sizeof(input)) < 0) { break; } if (strcmp(input, "stop") == 0) { handle_stop(0); break; } // 只写入用户输入内容,不包含提示符 write(pipefd[1], input, strlen(input)); write(pipefd[1], "\n", 1); } close(pipefd[1]); } } return 0; } ``` --- ## ✅ 修改说明 | 修改点 | 作用 | |--------|------| | `printf("input> ")` | 只是提示用户输入,不写入管道 | | `write(pipefd[1], input, strlen(input))` | 只写入用户输入的内容,不包括 `input>` | | 使用 `readline()` 替代 `fgets()` | 避免缓冲区残留问题 | --- ## ✅ 预期效果 现在你运行 `/bin/cat`,输入: ``` Hello World! ``` 你应该看到输出: ``` Hello World! ``` 而不是: ``` input>Hello World! Hello World! ``` --- ## ✅ 总结 | 问题现象 | 原因 | 解决方案 | |----------|------|----------| | 输出了 `input>Hello World!` | 输入内容包含提示符 | 提示符仅用于显示,不写入管道 | | Shell 回显异常 | 输入内容被重复写入 | 分离提示符和输入内容逻辑 | --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值