Skip to content

lab-00: 实验须知、环境、基础

:material-circle-edit-outline: 约 1055 个字 :fontawesome-solid-code: 31 行代码 :material-clock-time-two-outline: 预计阅读时间 4 分钟

Solidity是什么?

Solidity 是一种面向合约的高级编程语言,专门为实现智能合约而设计。你可以把它想象成一种为区块链世界量身定制的编程语言。

特点

面向合约: Solidity 的核心概念是合约。合约是一段代码,一旦部署到区块链上,就会自动执行,无法篡改。这使得合约非常适合用于构建去中心化的应用程序(DApp)。

Linux 系统下的可执w行文件 ELF

ELF (Executable and Linkable Format) 是 Linux 系统下广泛使用的可执行文件格式。它包含了程序执行所需的所有信息,包括代码、数据、符号表、调试信息等。

ELF 与 PE 的区别

平台差异: ELF 主要用于类 Unix 系统(如 Linux、macOS),而 PE (Portable Executable) 主要用于 Windows 系统。

结构差异: 虽然两者都是可执行文件格式,但它们的内部结构和组织方式有很大不同。

Linux 系统下的环境变量

环境变量是操作系统提供的一种机制,用于存储程序运行时的配置信息

每个进程都有自己的环境变量,这些变量可以通过 shell 命令设置和查看。

常用环境变量

  • PATH: 指定可执行文件的搜索路径。
  • LD_LIBRARY_PATH: 指定共享库的搜索路径。
  • HOME: 用户的主目录。
  • SHELL: 默认的 shell。

Linux 下通过 gcc/clang 完成 C 代码的编译

Linux 下通过 gdb 完成对可执行程序的调试

Makefile 以及 make 工具

Foundry/Remix 工具的使用

FoundryRemix 都是zl非常流行的智能合约开发工具

Remix 是学习 Solidity 的绝佳选择,更适合初学者和小型项目,它提供了一个简单易用的开发环境,可以帮助你快速入门智能合约开发。

Foundry 更适合专业开发者和大型项目,它提供了丰富的功能和工具,可以帮助你构建高质量的智能合约。

进程间通信

什么是进程

进程是程序的执行过程,是动态的,随着程序的使用被创建,随着程序的结束而消亡。可以说进程是一个独立的可调度的任务。进程是系统调度的独立任务。进程是程序执行的独立任务。进程是资源(内存资源)管理的最小任务

fork系统调用用于创建一个新进程,称为子进程,它与父进程同时运行(并发),且运行顺序不定(异步)。

fork() 函数如果成功调用一次返回两个值,一共可能有三种不同的返回值:

  1. 在父进程中,fork返回新创建子进程的进程ID;

  2. 在子进程中,fork返回0;

  3. 如果出现错误,fork返回一个负值。
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
    pid_t child;
    child = fork();
    if(child == 0)//子进程抢到处理机资源并运行
    {//子进程运行代码
        for(int i = 0; i < 3; i++)
        {
            printf("I am child!\n");
            sleep(1);
        }
    }
    else if(child > 0)//父进程抢到处理机资源并运行
    {//父进程运行代码
        for(int i = 0; i < 3; i++)
        {
            printf("I am parent!\n");
            sleep(1);
        }
    }
    return 0;
}

父进程与子进程并发运行,且运行顺序不一定(可以调整循环次数观察结果)

在这里插入图片描述

什么是管道

管道是两个进程之间的连接,一个进程的标准输出成为另一个进程的标准输入。在UNIX操作系统中,管道用于进程间通信。

int pipe(int fds[2]);

参数
fd[0] 将是管道读取端的fd文件描述符
fd[1] 将是管道写入端的fd
返回值0表示成功-1表示失败
  • 管道只是单向通信,即我们可以这样使用管道:一个进程向管道写入数据,另一个进程从管道读取数据。

在这里插入图片描述

  • 管道,是内存中被视为“虚拟文件”的一块区域。
  • 管道可以被创建进程及其所有子进程读写。

当我们在任何进程中使用fork时,文件描述符在子进程和父进程之间保持打开状态。如果我们在创建管道后调用fork,则父级和子级可以通过管道进行通信。

在这里插入图片描述

  • 管道表现为FIFO(先进先出),管道实现类似队列数据结构。读写大小不是必须一致。在管道中,我们可以一次写入512字节,但可以一次只读取1字节。
  • 如果在某个内容写入管道之前,某个进程试图读取该内容,则该进程将挂起,直到内容被写入。