存档

Unix线程基础

2016/05/24 6,634

1 线程标识

每个线程都有一个唯一标识:线程ID. 线程ID用 pthread_t 数据类型来表示,该结构体在不同的系统上有不同的实现,某些操作系统将其实现为 unsigned long ,某些操作系统将其实现为结构体。所有可移植代码中不可以对其直接比较,必须使用一个函数来对两个线程ID进行比较。

不同的实现方式带来的影响就是,不能使用一种可移植的方式来打印该数据类型的值。
获取当前线程:

2 线程创建

新增的线程可以通过调用pthread_create 函数来创建

新创建的线程从 start_routine 函数的地址开始运行。该函数有一个 void* 类型的指针做为参数。如果函数需要多个参数,需要将参数做为结构体,然后将结构体地址做为参数传入。 创建线程时并不能保证新增线程优先于其它线程先运行,这依赖于操作系统的线程实现与调度算法。

继续阅读

解决 “building for iOS simulator, but linking in object file built for OSX, for architecture x86_64”

2016/03/14 23,388

在升级XCode到版本7以后,使用某些静态库(.a文件),并为IOS模拟器编译时,可能会出现如标题所示错误,提示这个库是为OSX系统的X86_64平台编译的。这可能是XCode版本的一个BUG,在链接静态库时,优先链接了OSX平台下的obj,并抛编译错误。

xcode error

为解决此问题,我们在编译静态库时,不要将添加OSX系统下的平台,或者使用lipo将静态库中关于OSX系统平台的内容移除。

首先使用 "-info"选项查看静态库里包含了哪些平台内容:

可以看到此静态库中包含了 i386和x86_64两个平台内容。然后使用 "-remove" 将其移除:

使用移除OSX平台内容后的静态库再次编译,问题解决。

但是会出现warning:

"ld: warning: ignoring file ……/libuuid.a, missing required architecture x86_64 in file ……/libuuid.a (4 slices)"

可以不用理会。但是在发布或部署到真机的时候,还是需要使用带有x86_64平台的静态库。

GitHub 设置代理

2015/06/16 7,178

红杏老板带吃喝嫖赌欠下……也不知道多少钱,带着他的小姨子跑了……所以,以下部分不用看了。再见。

 

运营商对GitHub的封锁使很多开发者感到头疼。幸好,我们还有VPN.

本文介绍如何结合红杏VPN公益版使用GitHub 。

红杏和(fān)谐(qiáng),想必大家在和GFW做斗争的时候都已经很熟悉了。做为一款和谐插件,红杏还是比较可靠的,收费也比较便宜。但是有一点比较难以接受的是,它无法给其他软件提供代理。为了弥补这个问题,红杏推出了一个公益版本,给广大开发者提供了一个免费的VPN服务器地址:

http://hx.gy:1080

在此次过程中,我们使用的就是这个地址。

git提供如下命令允许用户配置代理: 继续阅读

Sqlite3 写入数据库失败:attempt to write a readonly database.

2015/05/24 7,974

问题及解决办法

一个Android程序在大部分手机上运行正常,在某一款手机(华为荣耀7)上运行失败。具体表现为在写入Sqlite数据库时出现Sqlite3Exception :attempt to write a readonly database.

在仔细检查sqlite3_open/sqlite3_open_v2的参数、apk的SD卡读取权限、sqlite数据库的文件读写权限后,并没有发现任何问题,那么分析问题可能出在NDK与机器架构上了。

查看该机器使用的是arm64位CPU.然而在application.mk文件里,APP_ABI 并未配置64位选项。

配置

 APP_ABI   := armeabi-v7a arm64-v8a

后再使用NDK编译 ,解决sqlite3的Readonly的问题。

 

 

解决 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 问题

2014/10/22 6,677

最近重新配置vsftpd后,登入ftp后出现

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

根据问题提示查看了vsftpd.conf配置。

为禁止用户访问其他目录,以保证系统安全,做了如下设置:

chroot_local_user=YES

chroot_list_enable=NO

关于此配置项的具体说明可以戳这里

检查配置未发现其他问题。考虑是用户根目录的问题,将此ftp用户的根目录移动到 xx/webroot中,并在vsftpd.conf中配置此目录。问题依旧。

后查看svftpd的更新说明 ,发现从2.3.5版本以后,为保证服务器安全,根目录必须不可写。更改目录权限,解决此问题

chmod a-w xx/webroot

service vsftpd restart

解决 GoAgent install certificate failed, Please run proxy.py by administrator/root/sudo

2014/10/09 7,351

在Linux上使用goagent时可能会出现该问题。

出现该问题一般是由于root用户文件夹的权限不够,一些文件无法创建。

查看 root 下是否有.pki文件夹,若没有的话则创建之。并检查文件夹的权限。最好设置为777.

chmon 777  ~/.pki/

mkdir -p ~/.pki/nssdb
certutil -d ~/.pki/nssdb -N

 

sqlite3 时间函数

2014/05/07 5,796

sqlite中支持的时间和日期函数共有 5 个:

  1. date(timestring, modifier, modifier, …)
  2. time(timestring, modifier, modifier, …)
  3. datetime(timestring, modifier, modifier, …)
  4. julianday(timestring, modifier, modifier, …)
  5. strftime(format, timestring, modifier, modifier, …)

上述 5 个函数,都传入时间字符串 timestring 作为参数,后面接 0 到多个modifier 修饰符。 而 strftime 将 format 作为第一个参数,对时间进行重新格式化。

timestring

可以采用以下任何一种格式:

序号 时间字符串 实例
1 YYYY-MM-DD 2010-12-30
2 YYYY-MM-DD HH:MM 2010-12-30 12:10
3 YYYY-MM-DD HH:MM:SS.SSS 2010-12-30 12:10:04.100
4 MM-DD-YYYY HH:MM 30-12-2010 12:10
5 HH:MM 12:10
6 YYYY-MM-DDTHH:MM 2010-12-30 12:10
7 HH:MM:SS 12:10:01
8 YYYYMMDD HHMMSS 20101230 121001
9 now 2014-05-07

'T' 可以作为日期和时间的分隔符

modifier

  1. NNN days
  2. NNN hours
  3. NNN minutes
  4. NNN.NNNN seconds
  5. NNN months
  6. NNN years
  7. start of month
  8. start of year
  9. start of day
  10. weekday N
  11. unixepoch
  12. localtime
  13. utc

这些修饰符会按参数从左到右的顺序将时间进行相应的运算。

  • 前 6 个修饰符可以对时间进行加减时间段的运算。如 '2 days' 表示在 timestring 的基础上再加 2 天,而 '-1 hours' 表示在前时间的基础上减一个小时。
  • 'start of' 修饰符将时间转换成当月、当年、当天 有起始时间。如 'start of year' 将时间转换为 '2013-01-01 00:00:00'
  • 'weekday N' 修饰符将当前时间前进到下一个星期N.(周日为星期0,周一为星期1).如今天是1月1日星期3,那么下一个星期4将是1月2日,下一个星期2将是1月8日。
  • 'unixepoch' 将 10 位数字的unix时间戳转换为相应的时间字符串。
  • 'localtime' 和 'utc' 将时间在格林威治时间和本地时间之间进行转换

format

格式化字符串,使用'%'进行转义

  • %d 一月中的第几天,01-31
  • %f 带小数部分的秒,SS.SSS
  • %H 小时,00-23
  • %j 一年中的第几天,001-366
  • %J 儒略日数,DDDD.DDDD
  • %m 月,00-12
  • %M 分,00-59
  • %s 从 1970-01-01 算起的秒数
  • %S 秒,00-59
  • %w 一周中的第几天,0-6 (0 is Sunday)
  • %W 一年中的第几周,01-53
  • %Y 年,YYYY
  • %% % symbol

 

 

wordpress 固定连接使用标题的英文翻译

2014/03/27 3,183

WordPress使用文章名做为标题有助于优化搜索。但使用中文文章名做标题又显得很丑。所幸有人提供了插件WP Slug Translate,可以将中文文章名自动翻译成英文。

下载安装此插件。在点击发布文章后,出现错误:
Fatal error: Call to undefined function curl_init() in /mnt/...../wp-
content/plugins/wp-slug-translate/wp-slug-translate.php on line 30

curl_init() 是CURL提供的函数。出现这个错误应该是curl没有安装。到服务器上查看,果然未安装CURL;
使用命令:
apt-get install php_curl
安装以后重新测试。文章标题的英文翻译成功,但是访问时出现404错误。查找原因是
1.apache默认没有加载重写模块。
2.PHP没有开启伪静态方法。
解决方案:
1.在 /etc/apache2/mods-enabled 中添加一个load文件,假如mymod.load,将需要加载的模块添加进去。这里需要添加的是mod_rewrite.so:

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

2.打开 /etc/apache2/sites-available/default

.将站点节点下的AllowOverride None 改为AllowOveride All

然后重启Apache,成功设置标题为文章中文路径的英文翻译!