go 原子操作

Posted by 夏泽民

主要用于数值的操作,由于原子操作可有底层硬件实现,通常比操作系统层的锁机制效率要高。 一共分为5类,LoadT、StoreT、AddT、SwapT和CompareAndSwapT。 func LoadT(addr T) (val T)  func StoreT(addr T) (val T) func AddT(addr *T, delta T) (new T) func SwapT(addr *T, new T) (old T) func CompareAndSwapT(addr *T, old, new T) (swapped bool) T代表int32、int64、uint32、uint64、unitptr、pointer。



cmakelist

Posted by 夏泽民

1.CMake编译原理



mac mysql 开启binlog

Posted by 夏泽民

mysql -uroot -p1 查询是否支持binlog, 如下OFF代表不支持 mysql> show variables like ‘log_bin’; +—————+——-+ | Variable_name | Value | +—————+——-+ | log_bin | OFF | +—————+——-+ 1 row in set (0.00 sec) .查看my.cnf路径 mysql –help –verbose | grep my.cnf /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 默认mac 没有my.cnf 不要修改/usr/local/Cellar/mysql/5.7.13/support-files/my-default.cnf 否则会导致mysqld启动失败,各种权限错误 新建文件my.cnf并添加如下内容

log_bin

log-bin = mysql-bin #开启binlog binlog-format = ROW #选择row模式 server_id = 1 #配置mysql replication需要定义,不能和canal的slaveId重复 出现如下错误: eror: Found option without preceding group in config file: /Users/gukey/.my.cnf at line: 1 说明不符合格式要求,修改my.cnf [client] socket=/usr/local/var/mysql/mysql.sock [mysqld] socket=/usr/local/var/mysql/mysql.sock

log_bin

log-bin = mysql-bin #开启binlog binlog-format = ROW #选择row模式 server_id = 1

$/usr/local/Cellar/mysql/5.7.13/support-files/mysql.server start Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/bogon.pid).



autoconf和automake

Posted by 夏泽民

使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用“./configure”,“make”,“make instal”就可以把程序安装到Linux系统中去了。这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么这个文章对你也会有很大的帮助。   一、Makefile介绍   Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。   Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。   Makefile的基本结构不是很复杂,但当一个程序开发人员开始写Makefile时,经常会怀疑自己写的是否符合惯例,而且自己写的Makefile经常和自己的开发环境相关联,当系统环境变量或路径发生了变化后,Makefile可能还要跟着修改。这样就造成了手工书写Makefile的诸多问题,automake恰好能很好地帮助我们解决这些问题。   使用automake,程序开发人员只需要写一些简单的含有预定义宏的文件,由autoconf根据一个宏文件生成configure,由automake根据另一个宏文件生成Makefile.in,再使用configure依据Makefile.in来生成一个符合惯例的Makefile。下面我们将详细介绍Makefile的automake生成方法。   二、使用的环境   本文所提到的程序是基于Linux发行版本:Fedora Core release 1,它包含了我们要用到的autoconf,automake。   三、从helloworld入手   我们从大家最常使用的例子程序helloworld开始。   下面的过程如果简单地说来就是:   新建三个文件:  helloworld.c  configure.in  Makefile.am   然后执行:autoscan; aclocal; autoconf; automake –add-missing; ./configure; make; ./helloworld;   就可以看到Makefile被产生出来,而且可以将helloworld.c编译通过。很简单吧,几条命令就可以做出一个符合惯例的Makefile,感觉如何呀。现在开始介绍详细的过程:   1、建目录   在你的工作目录下建一个helloworld目录,我们用它来存放helloworld程序及相关文件,如在/home/my/build下: $ mkdir helloword $ cd helloworld



bash 2>&1

Posted by 夏泽民

“命令>/dev/null 2>&1 ”等价于“命令 &>/dev/null ” 我们在Linux下经常会碰到nohup command>/dev/null 2>&1 &这样形式的命令。首先我们把这条命令大概分解下首先就是一个nohup表示当前用户和系统的回话下的进城忽略响应HUP消息。&是把该命令以后台的job的形式运行。那么就剩下command>/dev/null 2>&1,command>/dev/null较好理解,/dev/null表示一个空设备,就是说吧command的执行结果重定向到空设备中,说白了就是不显示任何信息。那么2>&1又是什么含义? 2>&1 几个基本符号及其含义 /dev/null 表示空设备文件0 表示stdin标准输入1 表示stdout标准输出2 表示stderr标准错误从command>/dev/null说起 其实这条命令是一个缩写版,对于一个重定向命令,肯定是a > b这种形式,那么command > /dev/null难道是command充当a的角色,/dev/null充当b的角色。这样看起来比较合理,其实一条命令肯定是充当不了a,肯定是command执行产生的输出来充当a,其实就是标准输出stdout。所以command > /dev/null相当于执行了command 1 > /dev/null。执行command产生了标准输出stdout(用1表示),重定向到/dev/null的设备文件中。 说说2>&1 通过上面command > /dev/null等价于command 1 > /dev/null,那么对于2>&1也就好理解了,2就是标准错误,1是标准输出,那么这条命令不就是相当于把标准错误重定向到标准输出么。等等是&1而不是1,这里&是什么?这里&相当于等效于标准输出。这里有点不好理解,先看下面。 command>a 2>a 与 command>a 2>&1的区别 通过上面的分析,对于command>a 2>&1这条命令,等价于command 1>a 2>&1可以理解为执行command产生的标准输入重定向到文件a中,标准错误也重定向到文件a中。那么是否就说command 1>a 2>&1等价于command 1>a 2>a呢。其实不是,command 1>a 2>&1与command 1>a 2>a还是有区别的,区别就在于前者只打开一次文件a,后者会打开文件两次,并导致stdout被stderr覆盖。&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的a。从IO效率上来讲,command 1>a 2>&1比command 1>a 2>a的效率更高。 举个栗子 来个shell //test.sh #!/bin/sh t date chmod +x test.sh为test.sh增加执行权限。这里我们弄了两条命令,其中t指令并不存在,执行会报错,会输出到stderr。date能正常执行,执行会输出当前时间,会输出到stdout。 执行./test.sh > res1.log结果为 我们发现stderr并没有被重定向到res1.log中,stderr被打印到了屏幕上。这也进一步证明了上面说的./test.sh > res1.log等价于./test.sh 1>res1.log 执行./test.sh>res2.log 2>&1结果为 这次我们发现stdout和stderr都被重定向到了res2.log中了。上面我们未对stderr也就是2说明如何输出,stderr就输出到了屏 幕上,这里我们不仅对stdout进行说明,重定向到res2.log中,对标准错误也进行了说明,让其重定向到res2.log的引用即 res2.log的文件描述符中。 再思考一下 为何2>&1要写在command>1的后面,直接用2可以么。比如ls 2>a。其实这种用法也是可以的,ls命令列出当前的目录,用stdout(1)表示,由于这个时候没有stderr(2),这个时候执行ls 2>a也会正常产生一个a的文件,但是a的文件中是空的,因为这时候执行ls并没有产生stderr(2)。



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required