Linux下VMware虚拟机报Could not open /dev/vmmon: No such file or directory. Please make sure that the kernel module `vmmon’ is loaded.错误的解决方法

问题描述

Linux下的VMware虚拟机在启动时报Could not open /dev/vmmon: No such file or directory.
Please make sure that the kernel module `vmmon’ is loaded.错误。

解决办法

重新编译模块。

$sudo vmware-modconfig --console --install-all

再次运行即可。

C语言实现删除一个字符串中的指定字母

题目要求

删除一个字符串中的指定字母,如:字符串 “hello,world!”,删除其中的 o 字母,应输出 “hell,wrld!”

解题思路

将字符串内不属于需搜索的字符的字符再赋值到该字符串的地址空间中,最后再在字符串结尾加上结束标记\0

程序代码

#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
    int num = 0;
    for (int i = 0; i <= strlen(argv[1]); i++)
        if (argv[1][i] != argv[2][0])
        {
            argv[1][num] = (i == strlen(argv[1])) ? '\0' : argv[1][i];
            num++;
        }
    printf("%s\n", argv[1]);
    return 0;
}

运行结果

2018-02-22 08-22-51屏幕截图.png

Linux下VMware虚拟机启动时报Kernel headers for version 4.x-xxxx were not found. If you installed them[…]的错误的解决方法

问题表现

在Linux下安装完VMware虚拟机后启动虚拟机报:Kernel headers for version 4.x-xxxx were not found. If you installed them[…],具体报错如下图所示。
2018-02-20 08-50-33屏幕截图.png

解决方法

安装系统内核对应版本的linux-headers
例如,我的系统的内核版本是4.14.19,操作系统是Archlinux,就执行如下命令来安装。

$ sudo pacman -S linux-headers

之后再根据命令提示选择与内核版本对应的linux-headers
Ubuntu和Fedora用户则使用各自的包管理工具安装正确的linux-headers版本

安装后再次启动VMware会看到如下提示。
2018-02-20 16-50-27屏幕截图.png
点击install并按要求输入管理员密码即可。

C语言依据用户输入的数据大小动态开辟内存空间

前言

使用C语言编程时经常需要从各种途径读取数据并将其保存在内存中,但C语言为了保持简洁,所以只包含一些很基础的数据类型,有时候并不能很好的存储用户输入的数据。
例如:需要存储用户输入的字符串,通常,教科书上所教的方法是分配一个较大的数组来进行存储。显然,这在实际生产环境中是相当不切实际的。
为了相对完美的解决这个问题,我们可以通过动态的开辟堆空间来实现对数据的存储。

例程简介

此例程每次接收一个字符,并利用realloc函数根据数据量大小来重新分配堆空间。

例程代码

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main(void) {
    char tmp = '\0';
    char *str = NULL;
    
    for (int i = 0; true; i++) {
        tmp = getchar();
        
        if ((tmp == '\r') || (tmp == '\n'))
            break; /*每次循环都按照当前数据量大小来重新分配堆空间大小*/
            
        str = (char *) realloc(str, sizeof(str) + sizeof(tmp));
        
        if (str == NULL)
            return -1;
        
        str[i] = tmp;
    }
    
    printf("%s\n", str);
    
    return 0;
}

执行结果

输入:hello,it7e!!!,程序动态开辟内存存储字符串并输出hello,it7e!!!,如下图。
2018-02-10 17-53-23屏幕截图.png

Fcitx输入法第二个候选词显示为…的解决方法

问题表现

Fcitx输入法第二个候选词显示为…,因为在输入状态下给输入法截屏不太方便,所以这里就不放图啦。

产生的原因

这是因为Fcitx启用了“云拼音”导致的,“云拼音”本该是一个非常方便的一个功能,但Fcitx的“云拼音”默认使用的是谷歌的服务,由于众所周知的原因,所以在国内是使用不了的。

解决方法

打开Fcitx的配置窗口,选择“附加组件”,找到并选中“云拼音”
2018-02-09 22-18-22屏幕截图.png
点击“配置”,找到“Cloud Pinyin Source”(云拼音源)选项,将其的值改为“Baidu”,默认是“Google”。
2018-02-09 22-20-19屏幕截图.png
修改后点击“确定”并关闭FCitx的配置窗口即可。

哎呀,开博满一年了

刚刚突然想起了,“坏蛋的博客”是在2017年2月1日建立并发表第一篇博文的,而今天是2018年2月2日,满一岁啦!
来回顾下这一年中取得的成绩:

  • 博客日独立访客20+
  • 站长工具的百度权重1
  • 博文数量195
  • 百度索引400+
  • ……

虽然以上列出的都不是什么大的数字,但贵于从无到有的突破。
最初建站时,连续几个月都看不到一个独立访客,长久以来都是只有我、同学和老师会偶尔浏览。使我坚持下来的,不是为了建成一个网站的愿望,而是做学习笔记的需要。这也恰恰印证了一句话:“不要为了建站而建站”。

2018年,希望可以取得更加优秀的成绩。

minicom报Device /dev/ttyS1 lock failed: Operation not permitted.的解决方法

问题表现

启动minicom时报如下错误:

Device /dev/ttyS1 lock failed: Operation not permitted.

问题产生的原因

这是因为minicom程序没有被正确关闭,导致串口锁未被解开,解决办法自然是终止仍在进行的minicom进程。

解决方法

使用ps命令配合管道命令来查看minicom的进程号。
2018-02-02 09-32-25屏幕截图.png
如上图,进程ID是20209,使用kill命令杀死之。

$ sudo kill -9 29209

推荐一个桌面Linux发行版-Linux Mint

对于学习计算机的同学来讲,装一个Linux来作为日常使用的操作系统是再好不过的事了。但Linux下的发行版本众多,如何选择一个适合自己的发行版就成了一门学问。
这里我个人推荐下Linux Mint,这个发行版基本做到了“开箱即用”,完全不需要像Fedora那样折腾,又不会时不时出现Ubuntu下恼人的各种系统崩溃,其易用性仅次于deepin而又不似deepin那样BUG无数。
同时,Linux Mint对笔记本等高分辨率的屏幕支持比较好,这也是我选择这一发行版的重要原因。

Linux Mint除了集成了大量实用的工具外还自主开发了一些很好用的东西,例如:
一键清理软件包卸载后的残留配置。
2018-02-01 11-45-54屏幕截图.png
第一次启动系统时弹出来的“欢迎界面”。
2018-02-01 11-47-46屏幕截图.png
以及算不上美观,也没有什么帅炸了的特效,但足够方便好用的Cinnamon桌面环境~
2018-02-01 12-01-16屏幕截图.png

简而言之,Linux Mint是我接触Linux以来最满意的一个发行版,我对她的评价是:真正的易用、实用。

2018年3月14日补充:

Linux Mint的软件仓库中的软件包版本简直是上古时代的。。。