有机合成-3-碱性条件和酸性条件下C-C键的形成反应
碱性条件和酸性条件下C-C键的形成反应常用
叔丁氧基:碱性强,亲核性弱
二甲亚砜阴离子(溶于二甲亚砜):强碱
LDA、LITMP、LHMDS(大位阻的二级胺的碱金属盐):强碱、溶于非质子溶剂甚至烷烃、位阻大亲核性弱
常用的碱性试剂与溶剂
RONa/ROH溶液:RONa悬浮于惰性溶剂Et2O、苯、DME(乙二醇二甲醚)
Na、K、NaH悬浮于乙醚、DMF、DME
二甲亚砜钠溶于DMSO
C-形成的区域选择性
多数有机化合物不止有一处被活化的碳氢键
动力学控制:碱夺取质子的相对速率碳负离子在位阻较小、H活性较强处形成,因为反应速度快,H易被夺取
热力学控制:相对稳定性碳负离子在位阻较大,取代基较多
eg:萘酚、α,β-不饱和醛酮
如何控制区域选择性动力学控制条件:强碱(LDA)、低温、无过量酮、非质子性溶剂(DMF、DME、DMSO、HMPA)
热力学控制条件:弱碱、过量酮、质子性溶剂
碳负离子的反应、应用烷基化
单官能团的烷基化区域选择性
碱性、温度、环状化合物大致为热力学控制
烯醇硅醚化[三甲基氯硅烷(TMSCl)],基于硅氧有强的亲和度,可以分离动力学和热力学的中间体 ...
有机合成-1-绪论
绪论色谱分离、现代波谱
Fischer 血红素
Robinson 托品酮
Woodward VB12
Merrifield 多肽固相合成
Corey 逆合成分析
选择性
化学选择性
区域选择性
Linux系统编程-4-浅谈C语言库函数和系统调用接口的关联
前言我们给出这样一张计算机的层级图:
可以看到,整个计算机体系分为硬件层和软件层
而在软件层,我们又有内核层与用户层
操作系统是横亘在硬件与用户软件之间的一个软件,对下管理各种硬件,对上为用户软件提供服务。我们可以这样类比
用户
校长
操作系统
辅导员
硬件
学生
我们人要管理好硬件,那么就需要一个懂硬件的帮我们管理硬件,那就是操作系统
但是,为了保证安全,操作系统对人只会开放特定的接口,通过特定的接口,人才可以来对硬件进行特定的管理,这样的接口,就叫做系统调用接口
然而,系统调用接口是比较复杂的,让人每次都使用系统调用接口去管理硬件也太烦了吧,于是,便有一些别有用心的人对于系统调用接口进行了二次封装,封装出了一些更加友好、人性化的接口来供人调用,例如:
C语言库函数
命令行解释器
图形化界面
总而言之,这张层级图解释了一切:
接下来,我们就以Linux操作系统为例,分别看一下系统调用接口和经过二次封装的C语言库函数对于读/写操作的方式
系统调用接口
1.考察open, read, write, lseek, close等函数的使用,同时理解文件描述符2.要求 ...
Linux系统编程-3-浅谈文件描述符和重定向
前言文件描述符是从0开始增长的整数,对于一个Linux进程而言,默认会打开0、1、2三个文件描述符,也就是打开三个文件| 文件描述符 | 文件 || ———- | ———- || 0 标准输入 | 键盘文件 || 1 标准输出 | 显示器文件 || 2 标准错误 | 显示器文件 |
当我们用系统接口open打开新的文件时,新分配的文件描述符是最小的未被分配的
进程、文件和文件描述符我们首先要明确这样一个概念:文件位于磁盘上时,当我们要操作文件时,实际上是创建了进程来操作文件
在进程控制块pcb所对应的结构体task_struct中,我们可以找到一个files_struct结构体的指针files,进程用这个结构体来管理自己打开的文件转到定义:提起从0开始的整数,大家想到了什么?
数组下标!
我们发现,在files_struct,恰好有一个叫做fd_array的struct file*数组,而struct file 结构体我们一看,正是描述文件属性和方法的结构体:其中,struct file_operations定义了read、write等方法:我们可以看到,函数指针是C语 ...
Linux系统编程-2-快速入门gdb
前言在VS系列的IDE中,我们习惯于图形化窗口的调试;而在linux的命令行下,我们则借助gdb这个工具来完成程序的调试
阅读完本文,你将了解:
显示代码
打断点、跳转到断点
逐过程执行
逐语句执行
长显示变量信息
跳转到指定行
禁用断点
调试时更改变量
如何将源码编译成可调试的二进制文件我们以前在编译一个C语言源文件mytest.c时,通常使用这条指令:
1gcc mytest.c -o mytest
顺利生成了可执行文件mytest
如果我们直接使用gdb调试这个可执行文件,会发现没有调试信息:这是为什么呢?
Linux中程序默认编译的时候
默认生成的可执行程序是release版本的,不可调式
所以
需要调试,gcc编译时需要加 -g 参数,以debug方式发布程序,使得可执行文件带有调试信息–>才可以被gdb追踪,调试,即:1gcc mytest.c -o mytest_debug -g
我们还可以发现的是,debug版本的可执行文件比release版本的大一些,这就是因为添加了调试信息
开始调试首先给一下源文件:
12345678910111213141516 ...
Linux系统编程-1-防火墙命令
前言我们经常要让防火墙放行/堵住服务器各个端口,故今做一份总结
常用防火墙命令123456789101112#查看防火墙状态firewall-cmd --state#列出放行的端口firewall-cmd --list -all#查看80端口是否放行firewall-cmd --query-port=80/tcp#永久放行80端口firewall-cmd --add-port=80/tcp --permanent#永久堵住80端口firewall-cmd --remove-port=80/tcp --permanent#重新加载firewall-cmd --reload
1234#关闭防火墙systemctl stop firewalld.service #启动防护墙systemctl start firewalld.service
C语言-8-程序的编译与预处理操作
摘要 本文将详细介绍当你在VS中按下ctrl+f5或者linux命令行下输入gcc 文件名后计算机所执行的一系列操作,包括预处理、编译、汇编、链接,以及一些C语言的预处理指令的使用。
翻译过程总述在ANSI C的任意一种实现中,存在2中不同的环境。第一种是翻译环境,负责将源代码转换成可执行的机器指令;第二种是执行环境,用于实际执行代码。*[1]*
一个程序从源代码到可执行程序一共会经历四个过程,分别是预处理、编译、汇编、链接,每一步都承担了不同的任务。
以下是GCC and Make Compiling, Linking and Building C/C++ Applications 中的描述 [2]:
GCC compiles a C/C++ program into executable in 4 steps as shown in the above diagram. For example, a “gcc -o hello.exe hello.c” is carried out as follows:
Pre-processing: via the GNU ...
C语言-7-文件操作
什么是文件及文件类型文件可以分为程序文件和数据文件。
1.程序文件,包括源程序文件(.c)、目标文件(windows平台下为.obj)和可执行文件(windows平台下为.exe)2.数据文件,包括程序运行时所需要从中读取数据的文件,或者需要向其中写入数据的文件。根据数据的组织形式,数据文件又可以分为文本文件和二进制文件
我们都知道,数据在内存中以二进制的形式进行存储,如果不加以转换直接输入到外存,这种形式的存储文件就是二进制文件;而如果要求数据在外存中以ASCII码的形式存在,则需要在存储前在内存中进行转换,我们说,以ASCII码的形式存储数据的文件就是文本文件。
这就要提到数据在内存中的存储形式了。字符一律以ASCII码的形式存储,而数值型数据既可以是二进制的形式,也可以是ASCII码的形式。
今有整数8848,我们来探究一下8848分别以ASCII和二进制的形式在内存中究竟是怎么存储的,请看图一:
图一
下面,我们以代码的形式来展示如何将8848以二进制的形式写入到数据文件当中,请看代码一:
12345678910111213141516//代码一#include<st ...
C语言-6-浮点型在内存中的存储
摘要在了解到C语言中整型是以二进制补码形式存储在内存中后,我们不禁很好奇:那么浮点型的数据是以什么形式存储在内存中的呢?
实际上,早在1985年,电气电子工程师学会就制定了IEEE 754标准来解决单精度浮点数在计算机内存中的存储问题。
那么接下来,我们就以IEEE754-1985版来看一看浮点数在内存中的真实面目。
浮点数的表达方式浮点数的组成浮点型家族中包含有:float、double、long double类型
IEEE 754标准下,一个浮点数V可以被拆解成三个部分
1V = (-1) ^ S * f * 2 ^ E
1-bit sign S —— 符号位S,用来表示正负
Biased exponent e = E+bias:指数位,负责浮点数的大小
Fraction f = · b1b2 … bp−1:小数位,负责浮点数的精度,且f大于等于1小于2
单精度浮点数对于32位的单精度浮点数而言,内存中32个bit位是这样分配的:
1位符号位
8位指数位
23位小数位
双精度浮点数对于64位的双精度浮点数而言,内存中64个bit位是这样分配的:
1位符号位
11 ...
C语言-5-整型在内存中的存储
整型的归类
char
short
int
long
以上都分为有符号(signed)与无符号(unsigned)的类型
原码、反码和补码定义计算机在表示一个数字时,是采用二进制的方式,所以为了准确表示一个数的正负,每一个有符号数都将其最高位视作是符号位,最高位为0表示正数,最高位为1表示负数。我们接下来以有符号整型int的数字进行分析。
一个有符号整数由符号位+数值位组成,数值位是其最高位,分别以0/1表示正/负
对于正数来说,反码补码都与原码相同;对于负数来说,符合以下3条规则:
原码:将十进制数字直接翻译为二进制数
反码:原码的符号位不变,其他位按位取反
补码:反码+1
而对于整型来说,整型在内存中实际上是以补码的形式进行存储的。
补码的意义有的同学可能就会问了,为什么计算机要发展出原码、反码、补码这么多种码呢?
这就与计算机对于整数的运算有关了。
CPU只有加法器,减法在运算时也会被视作一个数加另一个负数。考虑到整数的最高位是符号位,两个整数中若包含负数,以原码直接相加得到的数一定是不对的。所以问题就变成了如何使得运算简单而精确,既要处理符号位,又要只进行加法运算,达到以 ...