Linux系统远程操作和程序编译

一、远程登陆

1.Ubuntu网络配置

更改为桥接模式

终端中使用ifconfig指令

修改Ubuntu网络配置文件:sudo nano /etc/network/interfaces

添加:

auto lo

iface lo inet loopback

auto ens33

iface ens33 inet static

address 192.168.43.109

netmask 255.255.255.0

gateway 192.168.43.1

指令:sudo nano /etc/resolv.conf

添加:

nameserver 192.168.43.1

2.创建用户

代码:

sudo useradd -m user -s /bin/bash

sudo passwd user

sudo adduser user sudo

sudo nano /etc/sudoers

3.ssh安装

代码:

sudo apt install ssh

ps -e | grep ssh

4.putty远程登陆

5.树莓派创建新用户

代码

sudo useradd -m -s /bin/bash user

passwd user

sudo nano /etc/sudoers

6.树莓派上开启ftp服务

下载vsftpd:

sudo apt-get install vsftpd

修改配置文件:

cd /etc/

sudo gedit vsftpd.conf

write enable=YES

local_umask=022

anon_upload_enable=YES

anon_mkdir_write_enable=YES

重启服务:

sudo service vsftpd restart

7.Windows使用ftp进行操作

在终端中连接树莓派指令:ftp +树莓派ip

上传文件:

lcd (主机路径)

cd (树莓派目录)

put (文件路径)

下载:

get (文件名)

8.VNC

ubuntu安装VNC server:apt-cache search vncserver

安装:sudo apt-get install vnc4server

报错解决:sudo apt-get update

配置VNCserver:sudo nano /home/lyy/.vnc/xstartup

Windows VNC viewer安装登陆

二、talk程序

代码:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/wait.h>

#define BUFFER_SIZE 1024

int main() {

int parent_to_child[2]; // 父进程写,子进程读

int child_to_parent[2]; // 子进程写,父进程读

pid_t pid;

char buffer[BUFFER_SIZE];

复制代码
// 创建两个管道
if (pipe(parent_to_child) == -1 || pipe(child_to_parent) == -1) {
    perror("pipe");
    exit(EXIT_FAILURE);
}

// 创建子进程
pid = fork();
if (pid == -1) {
    perror("fork");
    exit(EXIT_FAILURE);
}

if (pid > 0) {  // 父进程
    close(parent_to_child[0]);  // 关闭父进程不用的读端
    close(child_to_parent[1]);  // 关闭父进程不用的写端
    
    printf("父进程(进程ID: %d)已启动,输入'exit'退出\n", getpid());
    
    while (1) {
        // 父进程发送消息
        printf("父进程> ");
        fgets(buffer, BUFFER_SIZE, stdin);
        buffer[strcspn(buffer, "\n")] = '\0';  // 去掉换行符
        
        if (strcmp(buffer, "exit") == 0) {
            write(parent_to_child[1], buffer, strlen(buffer) + 1);
            break;
        }
        
        write(parent_to_child[1], buffer, strlen(buffer) + 1);
        
        // 父进程接收消息
        int nbytes = read(child_to_parent[0], buffer, BUFFER_SIZE);
        if (nbytes <= 0) {
            break;
        }
        printf("子进程说: %s\n", buffer);
        
        if (strcmp(buffer, "exit") == 0) {
            break;
        }
    }
    
    close(parent_to_child[1]);
    close(child_to_parent[0]);
    wait(NULL);  // 等待子进程结束
    printf("父进程退出\n");
} else {  // 子进程
    close(parent_to_child[1]);  // 关闭子进程不用的写端
    close(child_to_parent[0]);  // 关闭子进程不用的读端
    
    printf("子进程(进程ID: %d)已启动,输入'exit'退出\n", getpid());
    
    while (1) {
        // 子进程接收消息
        int nbytes = read(parent_to_child[0], buffer, BUFFER_SIZE);
        if (nbytes <= 0) {
            break;
        }
        printf("父进程说: %s\n", buffer);
        
        if (strcmp(buffer, "exit") == 0) {
            break;
        }
        
        // 子进程发送消息
        printf("子进程> ");
        fgets(buffer, BUFFER_SIZE, stdin);
        buffer[strcspn(buffer, "\n")] = '\0';  // 去掉换行符
        
        if (strcmp(buffer, "exit") == 0) {
            write(child_to_parent[1], buffer, strlen(buffer) + 1);
            break;
        }
        
        write(child_to_parent[1], buffer, strlen(buffer) + 1);
    }
    
    close(parent_to_child[0]);
    close(child_to_parent[1]);
    printf("子进程退出\n");
    exit(EXIT_SUCCESS);
}

return 0;

}

结果:

三、OpenCV

1.安装OpenCV

unzip opencv-4.11.0.zip

cd opencv-4.11.0

sudo su

sudo apt-get update

sudo apt-get install cmake

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ...

sudo make

sudo make install

配置环境:

sudo gedit /etc/ld.so.conf.d/opencv.conf

sudo ldconfig

sudo gedit /etc/bash.bashrc

source /etc/bash.bashrc

2.text1.cpp

#include <opencv2/highgui.hpp>

#include <opencv2/opencv.hpp>

using namespace cv;

using namespace std;

int main(int argc, char** argv)

{

CvPoint center;

double scale = -3;

IplImage* image = cvLoadImage("lena.jpg");

argc == 2? cvLoadImage(argv[1]) : 0;

cvShowImage("Image", image);

if (!image) return -1; center = cvPoint(image->width / 2, image->height / 2);

for (int i = 0;iheight;i++)

for (int j = 0;jwidth;j++) {

double dx = (double)(j - center.x) / center.x;

double dy = (double)(i - center.y) / center.y;

double weight = exp((dxdx + dy dy)scale);
uchar
ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);

ptr[0] = cvRound(ptr[0] * weight);

ptr[1] = cvRound(ptr[1] * weight);

ptr[2] = cvRound(ptr[2] * weight);

}

Mat src;Mat dst;

src = cvarrToMat(image);

cv::imwrite("test.png", src);

cvNamedWindow("test",1); imshow("test", src);

cvWaitKey();

return 0;

}

编译命令:gcc test1.cpp -o test1 pkg-config --cflags --libs opencv

pkg-config是一个帮助查询已安装库信息的工具。

--cflags获取编译时需要的标志,包括头文件路径和其他编译选项。

--libs获取链接时需要的标志,包括:库文件路径

当执行该命令时:系统会查找OpenCV的.pc配置文件并从配置文件中读取头文件路径、库文件路径和依赖关系,再输出完整的编译和链接选项

Makefile:

CXX := g++

CXXFLAGS := -std=c++11 -Wall

OPENCV := $(shell pkg-config --cflags --libs opencv4 2>/dev/null || pkg-config --cflags --libs opencv)

SRC_DIR := src

BUILD_DIR := build

TARGET := $(BUILD_DIR)/test1

SRCS := (wildcard (SRC_DIR)/*.cpp)

OBJS := (patsubst ( S R C D I R ) / (SRC_DIR)/%.cpp, (SRCDIR)/(BUILD_DIR)/%.o,(SRCS))

all: (BUILD_DIR) (TARGET)

(TARGET): (OBJS)

(CXX) (CXXFLAGS) \^ -o @ $(OPENCV)

$(BUILD_DIR):

mkdir -p $(BUILD_DIR)

clean:

rm -rf $(BUILD_DIR)

run: ( T A R G E T ) . / (TARGET) ./ (TARGET)./(TARGET) your_image.jpg

.PHONY: all clean run

CMake:

cmake_minimum_required(VERSION 3.5)

project(OpenCV_Test CXX)

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(OpenCV REQUIRED)

message(STATUS "OpenCV library status:")

message(STATUS " version: ${OpenCV_VERSION}")

message(STATUS " libraries: ${OpenCV_LIBS}")

message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")

add_executable(test1 src/test1.cpp)

target_link_libraries(test1 ${OpenCV_LIBS})

install(TARGETS test1 DESTINATION bin)

相关推荐
IT小辉同学8 分钟前
PostgreSQL 与 MySQL 获取字段注释并转换为驼峰命名教程
数据库·mysql·postgresql
G_whang21 分钟前
centos7 安装jenkins
运维·jenkins
Jiangnan_Cai38 分钟前
Linux 系统 docker 部署 Dify
linux·docker·大模型·dify
言之。1 小时前
借助ssh实现web服务的安全验证
运维·安全·ssh
Two_brushes.1 小时前
【linux网络】深入理解 TCP/UDP:从基础端口号到可靠传输机制全解析
linux·运维·服务器
FJW0208142 小时前
【Linux】系统引导修复
linux·运维·服务器
✧北辰٩(ˊωˋ*)و南冥✧2 小时前
nginx 负载均衡配置(加解决重复登录问题)
运维·nginx·负载均衡
慌糖2 小时前
CentOS 安装 Redis 简明指南
linux·redis·centos
设计师小聂!2 小时前
linux常用命令(一)
linux·运维·服务器
hnlucky2 小时前
《Nginx + 双Tomcat实战:域名解析、静态服务与反向代理、负载均衡全指南》
java·linux·服务器·前端·nginx·tomcat·web