<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[liwech的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/liwech</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; liwech]]></copyright><item><title><![CDATA[虚拟机磁盘没有uuid]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/145176591</link><guid>https://blog.youkuaiyun.com/liwech/article/details/145176591</guid><author>liwech</author><pubDate>Thu, 16 Jan 2025 11:16:24 +0800</pubDate><description><![CDATA[2、打开虚拟机的配置文件 vmx  添加disk.EnableUUID = "TRUE"3、重新开机 /sbin/scsi_id -g -u -s /block/sdb。]]></description><category></category></item><item><title><![CDATA[多个指针指向同一个位置赋值为空]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/107908078</link><guid>https://blog.youkuaiyun.com/liwech/article/details/107908078</guid><author>liwech</author><pubDate>Mon, 10 Aug 2020 11:23:43 +0800</pubDate><description><![CDATA[多个指针指向同一个地址，这样使用没什么问题，只是操作时要注意。
	因为，每个指针变量保存的值，仅仅是指向的内容的地址值。多个指向同一个地址的指针，若其中一个指针等于NULL，不影响另一个指针。
	
	代码
	29 int* a = new int(10);
	30 int* c = a;
	31
	32 delete c; // 指向的那块内存内容(new int(10)释放
	33 c = NULL // 仅让c的值变为 null， a的值（地址）未变
	34
	35 if (a !...]]></description><category></category></item><item><title><![CDATA[深入理解linux内核中的IS_ERR()、PTR_ERR()、ERR_PTR()]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/107518536</link><guid>https://blog.youkuaiyun.com/liwech/article/details/107518536</guid><author>liwech</author><pubDate>Thu, 23 Jul 2020 09:21:00 +0800</pubDate><description><![CDATA[一、

函数原型

1、

static inline void *ERR_PTR(long error)
{
 return (void *) error;
}

将整数转换成指针 打印%p就是在计算机里存储的内容。如-1 返回的地址是0xffffffffffffffff。

这里的-1为什么是0xffffffffffffffff。其实这是计算机存储的。是-1的补码 。什么是补码请继续往下看。

2、

static inline long PTR_ERR(const void *ptr)
{
...]]></description><category></category></item><item><title><![CDATA[linux 用户态和内核态通信proc系统]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/107104430</link><guid>https://blog.youkuaiyun.com/liwech/article/details/107104430</guid><author>liwech</author><pubDate>Fri, 03 Jul 2020 14:33:58 +0800</pubDate><description><![CDATA[1、proc系统是一个虚拟的系统机器在一启动的时候就已经挂在上了，其原理我们不在分析。之后我们只管用proc系统就ok了。

内核提供了一些api来操作proc系统。这里主要就是创建目录proc_mkdir ，创建文件proc_create 和create_proc_entry，删除remove_proc_entry

2、proc_create 和create_proc_entry 都说有区别实质是一样的。区别在于proc_create 参数传入了file_operations *proc_fops，fi]]></description><category></category></item><item><title><![CDATA[lsof进程打开的文件]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/106117962</link><guid>https://blog.youkuaiyun.com/liwech/article/details/106117962</guid><author>liwech</author><pubDate>Thu, 14 May 2020 13:19:02 +0800</pubDate><description><![CDATA[lsof 它专门用来查看进程打开文件列表，不过，这里的“文件”不只有普通文件，还包括了目录、块设备、动态库、网络套接字等;

常用选项：

-p：指定进程pid（不能查看线程，这个要注意）

-i：查看网络连接信息（默认ipv4和ipv6的连接信息全部显示）

-i4：只查看ipv4的网络连接信息

-i4tcp：只查看ipv4，并且协议为tcp的网络连接信息（udp协议：-i4udp）

-i4:http：只查看ipv4，http服务的网络连接信息（服务名字以在/e...]]></description><category></category></item><item><title><![CDATA[linux gz文件解压]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/106091833</link><guid>https://blog.youkuaiyun.com/liwech/article/details/106091833</guid><author>liwech</author><pubDate>Wed, 13 May 2020 10:08:38 +0800</pubDate><description><![CDATA[.gz

解压1：gunzip FileName.gz

解压2：gzip -d FileName.gz

压缩：gzip FileName
]]></description><category></category></item><item><title><![CDATA[syslog服务重启]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/105969454</link><guid>https://blog.youkuaiyun.com/liwech/article/details/105969454</guid><author>liwech</author><pubDate>Thu, 07 May 2020 11:47:58 +0800</pubDate><description><![CDATA[service rsyslog restart
]]></description><category></category></item><item><title><![CDATA[inode分配]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/104490936</link><guid>https://blog.youkuaiyun.com/liwech/article/details/104490936</guid><author>liwech</author><pubDate>Tue, 25 Feb 2020 09:56:22 +0800</pubDate><description><![CDATA[new_inode(sb) 这是给inode分配一个新的空间里面调用inode_init_always会给inode赋初始值如果注册了自己的函数
 if (sb-&gt;s_op-&gt;alloc_inode)
  inode = sb-&gt;s_op-&gt;alloc_inode(sb);
 else
  inode = kmem_cache_alloc...]]></description><category></category></item><item><title><![CDATA[mount -t 调用过程]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/104472479</link><guid>https://blog.youkuaiyun.com/liwech/article/details/104472479</guid><author>liwech</author><pubDate>Mon, 24 Feb 2020 10:02:44 +0800</pubDate><description><![CDATA[mount是如何实现自己写的文件系统的挂在的。

1.mount -t 选择是自己文件系统的类型。其实也就是 /sbin/目录下的文件名字 mount的代码实现 sprintf(mountprog, "/sbin/mount.%s", type);

2.获取到自己写的可执行文件后mount会fork 子进程去执行 实现代码res = fork();execv(mountprog, moun...]]></description><category></category></item><item><title><![CDATA[centos 配置kdump crash 之后卡住不重启]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/101444443</link><guid>https://blog.youkuaiyun.com/liwech/article/details/101444443</guid><author>liwech</author><pubDate>Thu, 26 Sep 2019 15:07:52 +0800</pubDate><description><![CDATA[问题描述：

service kdump status 显示正常

greab 文件也配置了crashkernel=128M

就是 echo c &gt; /proc/sysrq-trigger 系统不重启卡住不动键盘灯闪烁

解决：

1、卸载rpm包重新安装kexec-tools-2.0.0-273.el6.x86_64 和 system-config-kdump-2.0.5-15.e...]]></description><category></category></item><item><title><![CDATA[centos源码下载]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/98609324</link><guid>https://blog.youkuaiyun.com/liwech/article/details/98609324</guid><author>liwech</author><pubDate>Tue, 06 Aug 2019 13:28:12 +0800</pubDate><description><![CDATA[http://www.360doc.com/content/16/1018/12/18525993_599328687.shtml
]]></description><category></category></item><item><title><![CDATA[svn生成patch和打（导入）patch文件的方法]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/90600943</link><guid>https://blog.youkuaiyun.com/liwech/article/details/90600943</guid><author>liwech</author><pubDate>Mon, 27 May 2019 11:56:27 +0800</pubDate><description><![CDATA[生成patch文件:
svn diff &gt; patchFile // 整个工程的变动生成patch
或svn diff file &gt; patchFile // 某个文件单独变动的patch

svn回滚：
svn revert FILE // 单个文件回滚
svn revert DIR --depth=infinity // 整个目录进行递归回滚

打patch:
patch -p...]]></description><category></category></item><item><title><![CDATA[字节对齐问题详解]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/90375372</link><guid>https://blog.youkuaiyun.com/liwech/article/details/90375372</guid><author>liwech</author><pubDate>Mon, 20 May 2019 16:12:39 +0800</pubDate><description><![CDATA[struct A{
    int    a;
    char   b;
    short  c;
};
struct B{
    char   b;
    int    a;
    short  c;
};


sizeof(strcut A)值为8；sizeof(struct B)的值却是12。


https://www.cnblogs.com/clover-toeic/p/38...]]></description><category></category></item><item><title><![CDATA[内核调试打印内容]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/90030140</link><guid>https://blog.youkuaiyun.com/liwech/article/details/90030140</guid><author>liwech</author><pubDate>Thu, 09 May 2019 13:16:37 +0800</pubDate><description><![CDATA[直接结构体名字 加地址 前提是知道地址。 struct slab ffffffff8116ed24

mod -s nnnn./nnnn.ko 加载模块自己的模块

#12 [ffff881064c1bbd8] rpc_run_task at ffffffffa0567475 [sunrpc]
#13 [ffff881064c1bbf8] enfs_session_call_sync at...]]></description><category></category></item><item><title><![CDATA[内核__link_path_walk函数详解]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/89950454</link><guid>https://blog.youkuaiyun.com/liwech/article/details/89950454</guid><author>liwech</author><pubDate>Thu, 09 May 2019 10:25:40 +0800</pubDate><description><![CDATA[做文件系统软连接时候，分析nfs的实现时候。用dump_stack() 发现__link_path_walk函数被调用。这个函数已经多次被使用，都没有细究。现在觉得深入的了解一下。

调用过程调用do_lookup这个来返回文件的属性，如果是链接文件则进行特殊的处理do_follow_link
...]]></description><category></category></item><item><title><![CDATA[nfs日志打开]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/89840600</link><guid>https://blog.youkuaiyun.com/liwech/article/details/89840600</guid><author>liwech</author><pubDate>Sun, 05 May 2019 10:32:49 +0800</pubDate><description><![CDATA[sysctl -w sunrpc.nfs_debug=65535

客户端日志打开，0表示关闭。

sysctl -w sunrpc.nfsd_debug=1023

nfs服务端日志打开，0表示关闭。
]]></description><category></category></item><item><title><![CDATA[如何编译内核源码和单独的内核模块]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/89530894</link><guid>https://blog.youkuaiyun.com/liwech/article/details/89530894</guid><author>liwech</author><pubDate>Fri, 26 Apr 2019 09:32:37 +0800</pubDate><description><![CDATA[总论：工作需求用了centos内核中sunrpc的库。因为用了库所以相应的log就没有。所以决定从新编译sunrpc.ko并添加自己的日志。

1、下载对应的内核源码（uname -r 显示 2.6.32-431.el6.x86_64）应为是centos的源码所以要去centos官网下载。不要在内核源码官网下载，因为也没有对应的版本号。centos源码包（这个包含各种命令的源码例如libc库的...]]></description><category></category></item><item><title><![CDATA[poll]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/47025197</link><guid>https://blog.youkuaiyun.com/liwech/article/details/47025197</guid><author>liwech</author><pubDate>Thu, 23 Jul 2015 17:03:21 +0800</pubDate><description><![CDATA[poll提供的功能与select类似，不过在处理流设备时，它能够提供额外的信息。
　　#include 
　　int poll(struct pollfd fd[], nfds_t nfds, int timeout);
　   参数：
　　 1）第一个参数:一个结构数组,struct pollfd结构如下：
　　struct pollfd{
　　int fd;            ]]></description><category></category></item><item><title><![CDATA[select函数]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/47024621</link><guid>https://blog.youkuaiyun.com/liwech/article/details/47024621</guid><author>liwech</author><pubDate>Thu, 23 Jul 2015 16:35:23 +0800</pubDate><description><![CDATA[网络编程中一个很重要的函数，没有整理，直接转过来，讲的还是蛮详细的。
转自：http://blog.youkuaiyun.com/zhw888888/archive/2009/03/29/4034515.aspx
   Select在Socket编程中还是比较重要的，可是对于初学Socket的人来说都不太爱用Select写程序，他们只是
习惯写诸如connect、accept、recv或recvfrom]]></description><category></category></item><item><title><![CDATA[ubantu下安装搜狗输入法]]></title><link>https://blog.youkuaiyun.com/liwech/article/details/47001885</link><guid>https://blog.youkuaiyun.com/liwech/article/details/47001885</guid><author>liwech</author><pubDate>Wed, 22 Jul 2015 13:11:22 +0800</pubDate><description><![CDATA[安装了多次，决定总结一下。
1、http://pinyin.sogou.com/linux/ 在这个网址上下载搜狗输入法。
点击立即下载64bit之后就会跳转到另一个网址
2、跳转网址为
http://pinyin.sogou.com/linux/help.php
按照里面的安装步骤进行。
3、语言设置要选择一下。


4、重新启动就ok了]]></description><category></category></item></channel></rss>