Skip to content

Instantly share code, notes, and snippets.

View Thesharing's full-sized avatar

Zhilong Hong Thesharing

View GitHub Profile
@Thesharing
Thesharing / MarkedDown 语法.md
Last active March 26, 2022 07:09
Markdown基本语法

<< 访问 Wow!Ubuntu

NOTE: This is Simplelified Chinese Edition Document of Markdown Syntax. If you are seeking for English Edition Document. Please refer to Markdown: Syntax.

声明: 这份文档派生(fork)于繁体中文版,在此基础上进行了繁体转简体工作,并进行了适当的润色。此文档用 Markdown 语法编写,你可以到这里[查看它的源文件][src1]。「繁体中文版的原始文件可以[查看这里][src] 。」--By @[riku][t]

注: 本项目托管于 [GitCafe][]上,请通过"派生"和"合并请求"来帮忙改进本项目。

在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述。

errno这个全局变量在<errno.h>头文件中声明如下:extern int errno;

errno是一个由POSIX和ISO C标准定义的符号,看(用)起来就好像是一个整形变量。当系统调用或库函数发生错误的时候,比如以只读方式打开一个不存在的文件时,它的值将会被改变,根据errno值的不同,我们就可以知道自己的程序发生了什么错误,然后进行相应的处理。

为什么,要强调errno看起来好像是一个整形变量呢?因为有的标准(如ISO C) 只规定了errno的作用,而没有规定它的实现方式,它可能被定义成一个变量,也有可能被定义成一个宏,这个具体要看编译器自己的实现。早些时候,POSIX.1曾把 errno 定义成 extern int errno 这种形式,但现在这种方式比较少见了。因为以这种形式来实现 errno,在多线程环境下errno变量是被多个线程共享的,这样可能线程A发生某些错误改变了errno的值,线程B虽然没有发生任何错误,但是当它检测errno的值的时候,线程B会以为自己发生了错误。所以现在errno在Linux中被实现成extern int * __errno_location(void): #define errno (*__errno_location()),这样每个线程都有自己的errno,不会再发生混乱了。

关于errno有三点需要特别注意:

@Thesharing
Thesharing / Vi编辑器命令.md
Last active April 6, 2016 10:22
Vi编辑器命令

Vi编辑器命令

启动和导航 vi

大多数 Linux 发行版现在都附带了 vim(表示 Vi IMproved,改进的 vi)编辑器,而不是经典的 vi。Vim 向后兼容 vi,拥有图形模式 (gvim) 以及标准的 vi 文本模式接口。vi命令通常是 vim 程序的别名或符号链接。vim 有多个版本:微型、小型、普通、大型和超大型。您可以使用以下命令确定您运行的 vim 版本和它包含哪些特性:

vi --version

您是否还记得前面的教程 “学习 Linux,101:进程执行优先级” 中介绍更改优先级的部分,我们希望更改运行的 count1.sh shell 脚本的优先级。或许您自己已经尝试过,就会发现该命令运行得太快了,以至于您没有足够的时间使用 renice完成优先级更改。所以我们首先使用 vi 编辑器在文件的开头添加一行,让该命令休眠 20 分钟,以便我们有时间来更改优先级。

@Thesharing
Thesharing / Translation of BoP Problem.md
Last active July 20, 2017 03:57
编程之美 2016 复赛试题翻译
@Thesharing
Thesharing / IDisposable.cs
Created April 27, 2016 16:39
正确的IDisposable实现方式
public class Resource : IDisposable
{
private IntPtr nativeResource = Marshal.AllocHGlobal(100);
private AnotherResource managedResource = new AnotherResource();
// Dispose() calls Dispose(true)
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
string[] source = new string[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
if (Directory.Exists(DirName))
{
DirectoryInfo info = new DirectoryInfo(DirName);
foreach (FileInfo info2 in info.GetFiles())
{
if (source.Contains<string>(info2.Extension.ToLower()))
{
this.ImageList.Add(info2.Name);
this.ImageKeyWord.Add(info2.Name.Replace(info2.Extension, ""));
@Thesharing
Thesharing / Note.md
Last active October 3, 2016 16:28
Remember in your heart, deeply.

1 C

double要注意不能用 = 判断相等,最好用 a - b < 0.000001来判断

2 C

printf("%.lf", a);是会四舍五入的!也就是说,printf("%.lf", 0.95);输出的是1 --Java中的System.out.format也是一样的。

3 Java

@Thesharing
Thesharing / Speech-to-text - Solution.md
Last active July 14, 2017 07:16
Microsoft Cognitive Services - Speech-to-text - HTTP 408 issues - Solution

When I use curl to test Speech-to-text API of cognitive service, I ran into HTTP 403 and 408 errors.

The tutorial is here: Get started with the Speech REST API in cURL.

When you generate an access token with the first step, you would receive something like:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzY29wZSI6Imh0dHBzOi8vc3BlZWNoLnBsYXRmb3JtLmJpbmcuY29tIiwic3Vic2NyaXB0aW9uLWlkIjoiM2ZlNmRlMDY5YTAwNDRjZjgyMzUzYmNhNTY1MDRiZDMiLCJwcm9kdWN0LWlkIjoiQmluZy5TcGVlY2guUHJldmlldyIsImNvZ25pdGl2ZS1zZXJ2aWNlcy1lbmRwb2ludCI6Imh0dHBzOi8vYXBpLmNvZ25pdGl2ZS5taWNyb3NvZnQuY29tL2ludGVybmFsL3YxLjAvIiwiYXp1cmUtcmVzb3VyY2UtaWQiOiIiLCJpc3MiOiJ1cm46bXMuY29nbml0aXZlc2VydmljZXMiLCJhdWQiOiJ1cm46bXMuc3BlZWNoIiwiZXhwIjoxNTAwMDA4MDUyfQ.Q4XLfarJiVXDjIV9Q965QmyQOVcfW5-DV4LSUxxjVcE* Connection #0 to host api.cognitive.microsoft.com left intact

* Connection #0 to host api.cognitive.microsoft.com left intact indicates the end of responses.

@Thesharing
Thesharing / chcp.md
Created July 14, 2017 07:14
修改命令提示符编码 - Modify encoding of command.

在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容。在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集。 如果想正确显示UTF-8字符,可以按照以下步骤操作:

  1. 打开CMD.exe命令行窗口
  2. 通过 chcp命令改变代码页,UTF-8的代码页为65001
chcp 65001

执行该操作后,代码页就被变成UTF-8了。但是,在窗口中仍旧不能正确显示UTF-8字符。 3. 修改窗口属性,改变字体

@Thesharing
Thesharing / GPG.md
Last active July 20, 2017 03:59
Raspberry Pi

Problem

W: Error de GPG: http://security.debian.org jessie/updates Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 9D6D8F6BC857C906 NO_PUBKEY 8B48AD6246925553

Solution

gpg --keyserver pgp.mit.edu --recv-keys 9D6D8F6BC857C906
gpg --armor --export 9D6D8F6BC857C906 | apt-key add -