2016-07-03 23:55:18 yc2zgh1314 阅读数 3182
  • 征服ECMAScript6(JavaScript)视频教程

    本课程包含了几乎所有的ECMAScript6核心内容,包括let、const、变量的解构赋值,字符串扩展、正则扩展、数值扩展、数组扩展、函数扩展、对象扩展、Symbol、Proxy和Reflect、二进制数组、Set和Map数据解构、Generator函数、Promise对象、异步操作和async函数、Class、修饰器、Module等内容。

    23230 人正在学习 去看看 李宁

*Linux中的文件及目录复制命令:

       每一种操作系统都有成千上万的文件组成,对于linux这样“一切皆文件”的操作系统来说更不例外,大家应该都能很轻松使用windows下的文件查找功能,但是对linux这一功能可能并不是很熟悉,其实想玩linux的你更要牢牢掌握这个命令,因为linux不像windows那样有固定的文件名后缀,并且因为linux阵营下百家争鸣的特性,一个相同的文件在不同的发行版,可能会有不同,所以如果你能牢牢掌握cp命令的使用,你在摸索linux的道路上将会顺利很多,同时你会发现linux下文件查找功能其实很简单,而且要比windows下查找功能强大很多很多!

 cp命令:

     功能:将源文件或目录复制到目标文件或目录中。

 格式:cp [选项] 源文件或目录 目标文件或目录

 说明:如果源文件是普通文件,则该命令把它复制到指定的目标文件中;如果是目录,就需要使用“-r”选项,就需要把该目录下的所有文件和子目录复制到目标位置。

 选项:

     -a 该命令通常是在复制目录时使用,它递归的将源目录下的所有文件和子目录复制到目标目录中,并且保留文件链接及文件属性不变,它等效于-dpR。

     -d 复制时保留文件属性。

     -f,--force 如果现在的目录文件不能打开,则删除它并且重试一次。

     -i,--interactive 与-f不同,在覆盖目标文件之前先给出提示,要求用户予以确认,回答y,将覆盖目标文件。这是交互式复制。

     -p 除复制源文件的内容外,还将其修改时间和存取权限也复制到新文件中。

     -R, -r 递归复制目录,即将源文件下的所有目录及其各级子目录都复制到目标位置。

     -l 不复制,而是创建指向源文件的链接文件,链接文件名由目标文件给出。

 注意:cp命令复制一个文件,而源文件保持不变!

示例:

       将文件mfile复制到目录/home/mengqc下,并改名为examl;

         $cp mfile  /home/mengqc/examl

       将目录/home/mengqc下的所有文件及其子目录复制到/home/liuzh

         $cp -r  /home/mengqc  /home/liuzh

       交互式将目录/home/mengqc中以m打头的所有.c文件复制到/home/liuzh中:

         $cp -i /home/mengqc/m*.c /home/liuzh



2017-06-17 13:21:31 xx352890098 阅读数 1167
  • 征服ECMAScript6(JavaScript)视频教程

    本课程包含了几乎所有的ECMAScript6核心内容,包括let、const、变量的解构赋值,字符串扩展、正则扩展、数值扩展、数组扩展、函数扩展、对象扩展、Symbol、Proxy和Reflect、二进制数组、Set和Map数据解构、Generator函数、Promise对象、异步操作和async函数、Class、修饰器、Module等内容。

    23230 人正在学习 去看看 李宁

Q:最近在win10的docker拉的一个linux上用python脚本调用opencv处理图片时,按行读取一个txt中的图片路径(每行一个路径),结果将每行的字符串传进去,读取图片时发现读取的是none,但是如果手动赋值一个图片的路径字符串可以读取到。ps:读取每行已经做了replace('\n', '')和strip(),在mac上的linux读取不是none。

A:将txt第一行replace('\n', '')和strip()后写出到1.txt,手动把这个字符串写出到2.txt,然后我发现:

一个64,要给一个63,什么鬼?不是已经replace('\n', '')和strip()了吗?我用UltraEdit打开,发现:

1.txt相比2.txt:少个/(因为用了join),且多了个0D0A

原来是mac和win的差异,win下应该用replace('\r\n', '')而不是replace('\n', '')。

坑死我了再见


2016-11-09 10:15:27 FX677588 阅读数 25936
  • 征服ECMAScript6(JavaScript)视频教程

    本课程包含了几乎所有的ECMAScript6核心内容,包括let、const、变量的解构赋值,字符串扩展、正则扩展、数值扩展、数组扩展、函数扩展、对象扩展、Symbol、Proxy和Reflect、二进制数组、Set和Map数据解构、Generator函数、Promise对象、异步操作和async函数、Class、修饰器、Module等内容。

    23230 人正在学习 去看看 李宁

1. 安装说明
  最近想实现虚拟机和windows互联实现赋值粘贴功能,但是网上参考的贴图都是虚拟windows操作系统实例,让我走了不少弯路。实际上,做法一样,本人理解错了。下面介绍一下本人的实践,操作实现虚拟机VMware上Linux与windows互相自由复制与粘贴,可以让我们工作学习方便很多。
2. 搭配环境:
 本次实验的环境是:
  主机win7系统;
  虚拟机VMware9.02上运行的ubuntu14.04(linux)系统;
  版本环境不同没关系,操作一样。
3. 解决方法
  只需要在ubuntu安装一个vmware-tools的工具。具体实现如下:
  ①. 打开虚拟机的菜单中文为“虚拟机”,英文是“VM”,下拉框中会有一个Install vmware tools 工具的安装选项。
  (盗的图,截取状态栏不会。。。)
  这里写图片描述
  ②. 点击之后,在CD-ROM中生成在ubuntu的桌面下会出现 VMwareTools-9.2.3-1031360.tar.gz 的文件(你的版本号跟我不同,内容一样),当前为路径(/media/VMware Tools)。
  ③. 将此文件复制到随便文件下进行解压,本人如下操作:

cp  VMwareTools-9.2.3-1031360.tar.gz   /tmp
cd  /tmp
tar -xzvf VMwareTools-9.2.3-1031360.tar.gz

  当然自己手动操作也一样的道理,文件拷贝的路径不同也没影响。
  ④. 这是会出现解压后的目录( vmware-tools-distrib目录)。然后执行编译操作。然后打开命令窗到指定安装包路径,执行:

 sudo ./vmware-install.pl

  最好根权限运行,以防无法编译。
  开始进行安装,遇到什么提醒默认设置即可,一路回车。如果执行过程中出现“…致命错误:Linux/smp_lock.h没有那个文件或目录,编译中断….”的错误,不用理会只管一路回车即可。
  ⑤. 安装完成提醒:
   Enjoy,
   –the VMware team
  ⑥. 重新启动ubuntu系统,大功告成。
4. 特别提醒
  特别提醒,windows上拖拽功能,如果想让虚拟机和windows上实现,只能在两个环境的桌面上实现拖拽。而不可以从其他目录下操作。其他目录下仅能完成手动复制粘贴。
这里写图片描述


个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

转载请注明出处:CSDN 无鞋童鞋

2020-01-13 16:08:03 weixin_43365952 阅读数 25
  • 征服ECMAScript6(JavaScript)视频教程

    本课程包含了几乎所有的ECMAScript6核心内容,包括let、const、变量的解构赋值,字符串扩展、正则扩展、数值扩展、数组扩展、函数扩展、对象扩展、Symbol、Proxy和Reflect、二进制数组、Set和Map数据解构、Generator函数、Promise对象、异步操作和async函数、Class、修饰器、Module等内容。

    23230 人正在学习 去看看 李宁

条件编译

条件编译属于预处理命令,它可以根据宏是否定义,来决定某段代码是否需要编译。
假设一个场景,我们写的程序,可能在windows和Linux上编译,在Linux上,因为种种原因,不能得到全面支持。

#ifdef ARCH_WIN
 /*代码段1*/ 
int main(int argc, char* argv[])
 { 
 printf("windows, all functions work well\r\n"); 
 return 0; 
} 
#else 
/*代码段2*/ 
int main(int argc, char* argv[])
 { 
 printf("Linux, bye bye...\r\n");
 return 0;
 } 
#endif

以上代码:如果定义了ARCH_WIN这个宏,那么编译代码段1,否则,编译代码段2. 条件编译在工程中的应用非常多。比如我们所谓的Debug版本,和Release版本其实 就是条件编译控制的。
不仅可以通过define指令去设置宏,还可以通过VS设置宏:

vs设置宏的原理,是直接通过编译器的编译选项设置。所以对于所有的cpp文件全部 生效。

条件编译在头文件包含中的应用

赤裸裸的头文件包含,容易产生重复包含的问题。
准备三个文件:
mybase.h

extern int nValue;

mybase2.h
···
#include “mybase.h”

void myfun();
···
main.cpp

#include "mybase.h" 
#include "mybase2.h"
int main(int argc, char* argv[]) 
{
 return 0; 
}

依据include的知识,最后main.cpp

extern int nValue; 
extern int nValue; 
void myfun();
int main(int argc, char* argv[]) 
{
 return 0; 
}

这使得有些头文件被重复包含了。轻则降低效率,重则编译出错。
我们可以使用条件编译,解决这个问题。
解决方案,是按照以下模板去写头文件

#ifndef 非常特殊的宏 
#define 非常特殊的宏 
你的头文件的内容…… 
#endif

比如修改mybase.h

#ifndef 20191212_NR1001_C12
#define 20191212_NR1001_C12
 extern int nValue; 
#endif

mybase2.h

#ifndef 20191212_MYBASE2 
#define 20191212_MYBASE2
 #include "mybase.h"
void myfun();
 #endif

这种套路,被更新的指令

#pragam once

所取代

结构体

他是非基本数据类型,顾名思义,不是编译器天生知道的类型。是程序员发明的类型:

  • 程序员先发明新类型(非基本数据类型)
  • 然后再用新类型,去定义新变量
    即将学习的结构体(struct),是C语言中最重要的非基本数据类型。 它的发明 目的,是为了复合信息
    举例,如果我们要写一个学生管理系统,那么当然要保存学生的信息,比如:
  • 姓名, char[12]
  • 性别, int
  • 学号, int
    如果是你,如何来存储一个学生的信息:
char szName1[12] = "路人甲" 
int nGender1=1;
 int nStuID1 = 201912001;

如果有两个学生:

char szName1[12] = "路人甲"
 int nGender1=1;
 int nStuID1 = 201912001;
 char szName2[12] = "路人乙"
 int nGender2=1;
 int nStuID2 = 201912002;

很明显,当需要记录的学生越来越多时,容易出错。因为姓名、ID、学号没有被很好 的封装起来。
结构体,就是为了解决封装问题而诞生的语法。
** 定义结构体类型**

struct tagStudent 
{ 
 char szName[8]; 
 int nGender; 
 int nStuID; 
};

使用结构体定义新的结构体变量
纯正的C89语法:

struct tagStudent stu1;

不过,之后的C++以及较新的C编译器,都允许省略struct来定义结构体变量

tagStudent stu1;

结构体成员的引用于赋值

从结构体类型的定义就可以看出,结构体中封装了多种变量。 我们可以通过"."运算符,去引用到结构体内部的变量(结构体成员)。

struct tagStudent
{
    char szStudentName[15];
    int nStudentGender;
    int nStrdentID;

};

int main(int argc, char* argv[])
{
    struct tagStudent stu1;
    struct tagStudent stu2;
    strcpy(stu1.szStudentName, "同学甲");
    stu1.nStudentGender = 1;
    stu1.nStrdentID = 20222888;
    strcpy(stu2.szStudentName, "同学乙");
    stu2.nStudentGender = 0;
    stu2.nStrdentID = 20222889;
    printf("姓名:%s\r\n性别:%d\r\n学号:%d\r\n", stu1.szStudentName, stu1.nStudentGender, stu1.nStrdentID);
    printf("姓名:%s\r\n性别:%d\r\n学号:%d\r\n", stu2.szStudentName, stu2.nStudentGender, stu2.nStrdentID);

    return 0;
}

结构体指针及其引用

如果需要将结构体作为参数传递
强烈不推荐使用值传递的方法传递结构体。
而强烈推荐使用指针传递结构体。
因为以值传递的方式传递结构体,结构体会整体被拷贝到栈帧并随函数返回释放。这 常常意味着较大的消耗资源。
甚至可能造成栈帧的崩溃。

//结构体作为值传递
struct tagStudent
{
    char szStudentName[2000];
    int nStudentGender;
    int nStudentID;
};//这个应该先定义(在调用这个结构体函数的定义之前),要不然报错

void ShowMessage(tagStudent stu)
{
    printf("姓名:%s\r\n性别:%d\r\n学号:%d\r\n", stu.szStudentName, stu.nStudentGender, stu.nStudentID);
};



struct tagStudent g_stu1;

int main(int argc, char* argv[])
{
    strcpy(g_stu1.szStudentName, "st1");
    g_stu1.nStudentGender = 1;
    g_stu1.nStudentID = 20221888;
    ShowMessage(g_stu1);
    return 0;
}

综上所述,我们推荐使用地址的方式(结构体指针)传递结构体。
结构体指针的定义

tagStudent* pStu = &g_stu1;

使用结构体指针引用结构体成员

//用结构体指针引用结构体成员
struct tagStudent
{
    char szStudentName[2000];
    int nStudentGender;
    int nStudentID;
};

void Show(tagStudent *pStu)
{
    printf("%s\r\n%d\r\n%d\r\n", pStu->szStudentName, pStu->nStudentGender, pStu->nStudentID);
}

struct tagStudent g_stu1;

int main(int argc, char* argv[])
{
    strcpy(g_stu1.szStudentName, "路人甲");
    g_stu1.nStudentGender = 0;
    g_stu1.nStudentID = 20221888;
    Show(&g_stu1);//注意此处指针&
    return 0;
}

使用结构体封装俄罗斯方块举例

结构体入门,主要是封装

struct tagBrick 
{ 
    char chBrick[4][4]; 
    int nShape = 0; //是长条还是方块,系数为16
    int nRotate = 0; //朝向,系数为4 
    int nRow = 0; 
    int nCol = 0; 
};
extern tagBrick g_Brick; 
extern tagBrick g_BrickNext;
2019-12-27 23:48:01 qq_36449975 阅读数 32
  • 征服ECMAScript6(JavaScript)视频教程

    本课程包含了几乎所有的ECMAScript6核心内容,包括let、const、变量的解构赋值,字符串扩展、正则扩展、数值扩展、数组扩展、函数扩展、对象扩展、Symbol、Proxy和Reflect、二进制数组、Set和Map数据解构、Generator函数、Promise对象、异步操作和async函数、Class、修饰器、Module等内容。

    23230 人正在学习 去看看 李宁

VSCode远程开发环境配置

在服务器上安装ssh

在VSCode上安装Remote Development插件

最新的win10应该是自带ssh的,验证方式如下图所示在这里插入图片描述

配置SSH密钥免密登录

在cmd窗口输入ssh-keygen,然后一路回车

然后就可以在用户目录下的.ssh文件夹下面看到id_rsa和id_rsa.pub两个文件,分别是公钥和私钥

赋值id_rsa.pub中的内容到用户目录下的.ssh文件夹里面的authorized_keys

打开/etc/ssh/sshd_config文件,将如下配置打开

PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

重启sshd,service sshd restart or systemctl restart sshd.service

配置VSCode的参数

操作如图所示
在这里插入图片描述
在这里插入图片描述

关闭连接

未主动关闭连接的话下次开启VSCode也会自动进行远程连接的操作

解决办法:手动点击文件->关闭远程连接即可生效

遇到的问题

Bad owner or permissions on C:\Users\XY/.ssh/config

网上的方法都试了一下,没用,然后发现setting中的config里面的路径没配置,配置一下就ok。

Sftp权限设置

阅读数 4441

没有更多推荐了,返回首页