在Linux下实现输入不回显

有些输入并不合适直白地出现在屏幕上,所以需要在输入时做不回显处理

getch函数有这种功能,它会读取一个输入的字符,但是不显示在屏幕上。

但是在linux环境下并不方便使用getch,它所属的头文件conio.h并不在标准c库中

在linux环境下可以使用stty命令和system()函数结合的方法达到getch的效果

  • stty

    stty命令会修改终端命令行的相关设置
    有屏蔽显示的作用

    stty echo #打开回显
    stty -echo #禁止回显
    

具体用法

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    char buf[101];
    system("stty -echo");
    scanf("%s", buf);
    system("stty echo");
    printf("%s", buf);
    return 0;
}

如此以来就可以在linux环境下实现不回显输入的功能

更多stty用法 -> https://ipcmen.com/stty

  • 还有另一种方法,使用termios.h来处理,但是因为相对麻烦就没有用
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现TCP转串口数据的功能,需要进行以下步骤: 1. 打开串口设备 使用`open()`函数打开串口设备,例如: ``` int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY); if (fd == -1) { perror("open"); return -1; } ``` 2. 配置串口参数 使用`tcgetattr()`和`tcsetattr()`函数获取和设置串口的参数,例如: ``` struct termios tio; tcgetattr(fd, &tio); tio.c_cflag = CS8 | CLOCAL | CREAD; tio.c_iflag = IGNPAR; tio.c_oflag = 0; tio.c_lflag = 0; cfsetospeed(&tio, B9600); cfsetispeed(&tio, B9600); tcsetattr(fd, TCSANOW, &tio); ``` 这里将波特率设置为9600,数据位设置为8位,无校验位,停止位为1位。 3. 创建TCP服务器 使用`socket()`函数创建TCP服务器,例如: ``` int server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd == -1) { perror("socket"); return -1; } struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(8888); if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("bind"); return -1; } if (listen(server_fd, 5) == -1) { perror("listen"); return -1; } ``` 这里使用8888端口号作为TCP服务器的端口号。 4. 接受TCP客户端连接 使用`accept()`函数接受TCP客户端的连接请求,例如: ``` struct sockaddr_in client_addr; socklen_t client_addr_len = sizeof(client_addr); int client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_addr_len); if (client_fd == -1) { perror("accept"); return -1; } ``` 5. 读取TCP客户端的数据并写入串口 使用`read()`函数从TCP客户端读取数据,然后使用`write()`函数将数据写入串口,例如: ``` char buf[1024]; int n = read(client_fd, buf, sizeof(buf)); if (n == -1) { perror("read"); return -1; } write(fd, buf, n); ``` 6. 读取串口的数据并发送给TCP客户端 使用`read()`函数从串口读取数据,然后使用`write()`函数将数据发送给TCP客户端,例如: ``` char buf[1024]; int n = read(fd, buf, sizeof(buf)); if (n == -1) { perror("read"); return -1; } write(client_fd, buf, n); ``` 7. 关闭TCP客户端连接和串口设备 使用`close()`函数关闭TCP客户端连接和串口设备,例如: ``` close(client_fd); close(fd); ``` 以上是一个简单的实现TCP转串口数据的示例代码,您可以根据您的实际需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值