0%

在《嗨翻C语言》的学习中,了解到“文件描述符”的概念。有一点点傻傻分不清楚文件描述符表中两列的区别,每每涉及重定向时觉得混乱。

文件描述符

参考 文件描述符-维基百科 中描述:

在 UNIX/Linux 平台上,对于控制台(Console)的标准输入,标准输出,标准错误输出也对应了三个文件描述符。它们分别是 0,1,2。在实际编程中,如果要操作这三个文件描述符时,建议使用 <unistd.h> 头文件中定义的三个宏来表示:STDIN_FILENO, STDOUT_FILENO 以及 STDERR_FILENO

对于内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或创建一个新文件时,内核向进程返回一个文件描述符。当读、写一个文件时,用 opencreate 返回的文件描述符标识该文件,将其作为参数传送给 readwrite

阅读全文 »

最初是在 x240(个人笔记本,便携、屏幕小)上安装的双系统,因为某些原因一直未能进行实际、有效的练习。曾经考虑是否将其卸载,恢复为原始 windows 系统,使用 windows 的 boot manager。毕竟使用双系统开机启动略有不便,按电源键到进入系统也会慢很多。但后来放弃了,就这样子将就着吧,一方面恢复单系统需要重新花费时间精力,另一方面 x240 上我没有安装虚拟机,有个 Debian 多一个选择。

后来,在 E431(公司笔记本)安装虚拟机,在虚拟机中安装 Debian8.1,使用的是官方社区下载的 ISO 镜像。在默认安装中文语言、图形界面之后,因为习惯使用 xshell 进行操作,所以其图形界面对我来说意义不大,在虚拟机中也很吃资源,一直想关之;从网上搜索,自己折腾,最终还是没有找到理想的解决方法,所以又在虚拟机中重新安装了一个,命名 Debian8Light,安装时没有选择图形界面。后来在 Debian 上的一些测试一直使用后者,前者在我刚刚接触 Debian 使用图形界面安装应用时起到了一定价值。

阅读全文 »

对于linux的学习会是一个很漫长、很有趣的过程。对于 Linux 命令的学习、日积月累,推荐 竹子-每日一个linux命令工具参考篇

首先,你要知道哪些命令大概什么功能,能完成什么操作(这个重在积累,如果不知道只能 Google 之了),简单入门推荐 最常用的20条命令。然后,关于命令的具体用法可以 Google 之,也可以使用 --help man 等帮助。

阅读全文 »

Linux 查看系统信息:查看内核版本,查看发行版本。

一、查看内核版本(2种方法):

查看 /proc/version

1
2
3
vimer@debian8light:~$ cat /proc/version 
Linux version 3.16.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.7-ckt20-1+deb8u4 (2016-02-29)
vimer@debian8light:~$
阅读全文 »

2016/4/11 9:33:05 昨天晚上重装了系统,将CentOS 6 换成了Debian 8。以下记录在Debian 上的配置修改、安装用具等操作。

2016/8/1 14:32:28 大概在两个月前,我又重新将 Debian 8 的系统还原回了 Bandwagon 官方推荐的 CentOS 6,因为翻墙是刚需,当时不单单需要 ShadowSocks,还需要 OpenVPN(使用 Google 的 Music Play 上传音乐用,生活在墙内,/(ㄒoㄒ)/~~)。另外,服务器毕竟是入门级配置,实际操作不太流畅。更换 CentOS 6 之后只配了 SS 服务器,再也没折腾过。

为什么换 Debian?

虽然在网上参考了很多,尤其是 服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS? - 袁昊洋 的回答,作为服务器第一优选 RHEL/CentOS。我为什么还非得要更换成 Debian 系统呢?其实只是喜欢,也因为是个人的机器,目前除了科学上网就是熟悉系统、练习开发,折腾坏了宕机都是没有影响的,写这篇备忘录也是为了重装系统时更轻松快捷。

阅读全文 »

2016/5/27 13:13:10

gcc 版本:

1
2
3
4
5
6
7
cts@SuSe-CTS2:~> gcc --version
gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
cts@SuSe-CTS2:~> man gcc
...(略)
阅读全文 »

在 Linux 终端下用 Vim 编辑程序时,不能按 Ctrl + S!

对于大多数终端,可以用 Ctrl + S 禁用“回显”,然后用Ctrl + Q 启用“回显”。引用来源

打印了一份《Vim基本操作思维导图.pdf》,放在桌子上,用到的时候随时查看。其中有不足之处,例如,关于替换的操作让我困惑了好几次,后来在网上重新搜索 Vim查找替换及正则表达式的使用 之后,才明白过来 g 参数并非全局,而是整行。

所以,系统性的学习还是很有必要的。参考 Vim命令合集,其中也有瑕疵,多看评论。在实践中慢慢掌握才是王道,再如何花费时间去查阅,随手敲敲命令看看效果都是浪费时间,刻意地进行反复练习,效果有,但是意义呢?

阅读全文 »

2015年12月7日 16:55:34

说说 CString 的几个函数。

  • CString 对象在内存中用一个计数器来维持可用缓冲区的大小。
  • 另外,CString 内,GetLength() 获取字符串长度并不是动态计算的,而是在赋值操作后计算并保存在一个 int 变量内的。
阅读全文 »

MSDN 对这个函数描述。Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// crt_sscanf_s.c
// This program uses sscanf_s to read data items
// from a string named tokenstring, then displays them.

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

<!-- more -->

int main( void )
{
char tokenstring[] = "15 12 14...";
char s[81];
char c;
int i;
float fp;

// Input various data from tokenstring:
// max 80 character string plus NULL terminator
sscanf_s( tokenstring, "%s", s, _countof(s) );
sscanf_s( tokenstring, "%c", &c, sizeof(char) );
sscanf_s( tokenstring, "%d", &i );
sscanf_s( tokenstring, "%f", &fp );

// Output the data read
printf_s( "String = %s\n", s );
printf_s( "Character = %c\n", c );
printf_s( "Integer: = %d\n", i );
printf_s( "Real: = %f\n", fp );
}

sscanf_s 取值的时候,需要在每个取值后面指定取值的最大大小。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "stdafx.h"

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

int _tmain()
{
TCHAR str[] = _T("CSFS dfdfd");
TCHAR szBuff[100] = {0};
TCHAR szBuff2[100] = {0};
_stscanf_s(str, _T("%s%s"), szBuff, _countof(szBuff), szBuff2, _countof(szBuff2));
_tprintf(_T("%s\n%s\n"), szBuff, szBuff2);

return 0;
}

2015年10月29日 10:15:57

问题描述

在做 mfc 项目的时候需要获取当前目录,当时直接调用了 GetCurrentDirectory() 使用。当时在 VS2010 中有三个项目,目录结构如下:

TrayOnly项目的目录结构

阅读全文 »