Linux系统学习Day1——虚拟机间的讲话
一、同一虚拟机中不同用户间的对话
(一)talk程序安装
在Ubuntu上,运行以下命令安装 talk 程序:
sudo apt update
sudo apt installbsd-talk
(二)启动talk程序
- 在服务器上启动 talk 服务
sudo systemctl start talk
-
允许 talk 服务通过防火墙
sudo ufw allow talk
(三)使用talk程序聊天
执行以下命令即可与对方进行通信
talk 名字
效果:
二、编程实现同一虚拟机中不同终端间的信息收发
(一)创建管道文件
1、管道文件:
管道文件(FIFO)是一种特殊的文件类型,用于在进程之间进行单向数据通信。它允许可执行程序通过文件系统进行数据传递,而无需直接交互。管道文件采用先进先出(FIFO)的方式处理数据,确保数据按顺序传输。
2、具体操作
执行以下代码创建管道文件:
mkfifo mypipe
(二)代码编写
创建两个C源文件:sender.c和receiver.c
- 执行以下命令创建C源文件:
nano sender.c
nano receive.c
在sender.c文件中写入以下代码:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("mypipe", O_WRONLY);
if (fd == -1) {
perror("open");
return 1;
}
char buffer[100];
printf("Enter message: ");
fgets(buffer, sizeof(buffer), stdin);
write(fd, buffer, strlen(buffer)+1);
close(fd);
return 0;
}
在receive.c文件中写入以下代码:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("mypipe", O_RDONLY);
if (fd == -1) {
perror("open");
return 1;
}
char buffer[100];
read(fd, buffer, sizeof(buffer));
printf("Received message: %s", buffer);
close(fd);
return 0;
}
- 编译代码
执行以下代码编译上述两个C源文件:
gcc sender.c -o sender
gcc receiver.c -o receiver
(三)程序运行
1、打开终端1运行接收端:
- 通过以下命令运行代码
./receiver
2、在另一个终端中运行发送端
- 通过以下命令运行代码
./sender
结果如下所示:
- 终端1:
- 终端2:
三、总结
通过本次实验,我对Linux系统中不同用户间通信的方式有了更深入的理解。首先,通过安装和使用talk程序,我成功实现了同一虚拟机中不同用户之间的实时对话,这让我对传统的文本聊天工具有了新的认识。其次,通过创建管道文件(FIFO)并编写C程序,我实现了不同终端间的信息收发,进一步掌握了进程间通信的基本原理和实现方法。实验过程中,我不仅巩固了对Linux命令和编程的理解,还提升了调试和解决问题的能力。这些实践让我对Linux系统的核心功能有了更直观的认识,为今后的系统编程和项目开发打下了坚实的基础