安装
安装环境windows。
首先从官网上下载一个CCF官方提供的Noi linux虚拟机以及安装文档 传送门。
然后,安装一个VMware Workstation 14 Pro,这里给出网盘 然后一步步解压安装 记得安装的时候不要勾选"启动时检查产品更新",其他按照默认设置安装就好。
打开VMware Workstation Pro,然后用keygen.exe获取激活码将产品激活。
然后创建新的虚拟机,选择典型。
在下一个弹窗中,选择稍后安装操作系统。之后的弹窗中,操作系统选择Linux,版本选择默认的Ubuntu
选择名称与位置,名称和路径最好不要带中文。
硬盘容量选择20G,将虚拟机存储为单个文件。
最后的一个弹框,点确定就好了。
然后,点击左上角 编辑——虚拟网络编辑器,点击桥接模式这一栏,然后勾选桥接模式
然后右键单击安装的虚拟机,进入设置。
跳到CD/DVD,勾选使用ISO镜像文件,路径是你下载的NoiLinux安装包
点击网络适配器,并勾选右边栏的前两项。
最后关闭设置,启动虚拟机。
如果虚拟机一直黑屏,用管理员模式运行cmd,输入netsh winsock reset
并重启电脑。
然后再按照安装文档里面写的做就可以安装好了。
如何解决安装过程中坑人的小窗口导致的无法按到“下一步”问题:按下 Alt+F7
,同时按下鼠标左键,然后拖动窗口就行了。
使用
改编自darkflames 的博客。
进入终端
Ctrl + Alt + T 组合键。
目录
绝对目录:/Yurchiu/code/hello/hello.cpp
。
相对目录(当前在code
目录中):./hello/hello.cpp
或 hello/hello.cpp
。
当前目录:./
。
父目录:../
。
注意linux没有扩展名这一个概念。
文件操作的相关命令
ls
$ ls
显示当前目录的所有文件与目录。
$ ls [DIR]
显示指定目录的所有文件与目录([DIR]
目录)。
cd
$ cd [DIR]
进入指定目录。
mkdir
$ mkdir [DIR]
创建子目录(新建文件夹)。
$ mkdir -p [DIR]
使用参数 -p
确保目录名称存在,不存在的就建一个。
mv与cp
$ mv [DIR] [DIR]
$ cp [DIR] [DIR]
mv
是将一个目录或文件移动到另一个目录。
cp
是将一个目录或文件复制到另一个目录。
rm
删除文件或目录,参数:
-i
删除前逐一询问确认。-f
即使原档案属性设为唯读,亦直接删除,无需逐一确认。-r
将目录及以下之档案亦逐一删除。-rf
直接删除指定的目录或文件。
删除文件可以直接无参数执行,删除目录则需要使用-r
。
$ rm [参数] [DIR]
pwd
$ pwd
显示当前工作目录的绝对路径。
其他
cat [FILE]
输出文件内容。time [PRO]
计时器,计算程序运行时间。diff -bB [参数]
文件比对器。
命令行下编辑,编译,运行程序
编辑
$ vim [FILE1] $ gedit [FILE1]
编译
$ g++ [FILE1] #输出文件默认为a.out $ g++ [FILE1] -o [FILE2] #输出文件为[FILE2] $ g++ [FILE1] -o [FILE2] -O2 # 开启O2优化 $ g++ [FILE1] -o [FILE2] -Wall #显示所有警告建议开启
运行程序
$ ./[FILE]
其他辅助工具
$ time ./[FILE2] #统计运行时间 $ diff -b [FILE3] [FILE4] # 比较文件差异,-b参数忽略行末空格
对拍
重定向到文件:./helloworld < input file > output file
。
将前一个程序的输出作为后一个程序的输入:./first | ./second
。
bat脚本版
@echo off
:loop
数据生成器 > data.txt
std程序 < data.txt > std.txt
debug程序 < data.txt > debug.txt
fc std.txt debug.txt
if not errorlevel 1 goto loop
pause
goto loop
C++版
#include<bits/stdc++.h>
using namespace std;
#define cmd(cmds) for(int a=0;a<sizeof(cmds)/4;a++){system((cmds[a]));}
char* build[]={
"g++ test.cpp -o test",
"g++ gen.cpp -o gen -O2",
"g++ std.cpp -o std -O2"
};
char* genData[]={
"./gen > data.in",
"./std < data.in > data.ans"
};
int main() {
cmd(build);
for(int i=0;i<100;i++)
{
cmd(genData);
printf("CASE: %d", i);
if(system("./test < data.in > data.out") != 0)
{
printf("RE\n");
break;
}
else if(system("diff -b data.out data.ans"))
{
printf("WA\n");
break;
}
else printf("AC\n");
printf("#####################################");
}
return 0;
}
Shell脚本版
#!/bin/bash
g++ test.cpp -o test
g++ std.cpp -o std -O2
g++ gen.cpp -o gen
i=1
tot=100
while [ $i -le $ tot ]; do
./gen > data.in
./std < data.in > data.ans
./test < data.in > data.out
if [ $? -ne 0 ]; then
echo -e "CASE $ i: RE"
break
elif diff -b data.ans data.out ; then
echo -e "CASE $ i: AC"
else
echo -e "CASE $ i: WA"
break
fi
let i++
done
vim
参见文章 Vim 的使用。
本文作者:Rorshach
本文链接:https://yz-hs.github.io/3c7dcf6a11e0/
版权声明:本博客中所有原创文章除特别声明外,均允许规范转载,转载请注明出处。所有非原创文章,按照原作者要求转载。