技术分享 -- 205




概述C99为C语言添加了很多新的特性,尤其在结构体的使用中,有了新的十分方便的功能 复合常量传统的C语言没有办法生成匿名结构值,必须使用临时结构变量活一个小结构生成函数:typedef struct Point { int x; int y; } Point; void printpoint (Point p); int main () { Point pt; pt.x=3; pt.y=5; printpoint (pt); return 0; } 在C99中,这一情况得以改善,因为C99中引入了“复合常量”的概念复合常量的一种形式就可以允许结构常量,例如,我们可以如下面这样调用:typedef struct Point { int x; int y; } Point; void printpoint (Point p); int main () { printpoint ((Point){3, 5}); return 0; } 或者:typedef struct Point { int x; int y; } Point; void printpoint (Point p); int main () { printpoint (
#技术帖    #c语言    #struct    #结构体   
概述最近一直在看《现代操作系统》这本书,此前对操作系统只是有一个基本的认识,在笔试面试中吃过不少亏,所以觉得这方面的欠缺的知识亟待去补充,于是开始了这本书的研读现在刚刚读完线程这个部分,对线程、进程有了一些自己的认识,也不知道理解是不是准确 进程简单的说进程就是一个程序第一次执行,程序是储存在磁盘上的文本部分,载入内存开始执行后就是一个进程,进程是独占CPU等资源的,CPU可以在短时间内不停地切换进程来实现多进程并行执行的假象 线程由于人们日益增长的需要,只有进程的并行显得效率很低,而且各进程之间不能共享资源有时是无法完成某些工作的,因此,诞生了切换更加快速的“轻量级进程” -- 线程,一个进程可以有多个线程,和多进程并行执行的原理一样,通过不断切换实现多线程并行执行的假象,但是这个切换时间只有纳秒级,要比进程的并行执行效率高得多 多线程的好处传统的进程只有一个调用线程,指令顺序执行,这样一个进程在某一时刻只能选择做一件事,比如对于文件下载程序,如果没有多线程,那么下载进度条将无法与下载进度保持真正的一致,因为如果进程去更新进度条,那么就一定会阻塞下载,但是实现多线程后,每件事都可以让不同的线程来完成,这样实现了进程内的并行处理,如果每件事占用CPU运算的10%,多线程让CPU使用率提升到了30%当然,多线程也有很多诸如维护等方面的
#技术帖    #操作系统    #os    #技术分享   

200x200


进程是一个程序的一次执行,而一个进程中至少要有一个线程线程的划分尺度要小于进程,使得多线程程序的并发性很高,所以线程也被称为“轻量级进程”每个进程可以不同的用户创建,具有不能共享的资源,进而构成竞争关

#技术帖    #操作系统    #os    #技术分享   
UNIX提供给应用程序员以100多个系统调用,用以在用户态下完成进程管理、文件管理等需要提升至内核态的操作,而windows下,应用程序员不能直接使用系统调用,而需要借用操作系统提供的数千个WIN32 API来完成,每个API函数可以调用一个或多个系统调用也可以不调用任何系统调用,仅仅在用户态下完成操作,不同版本的相同API所调用的系统调用以及其调用方式也可能不同windows的数千个win32 API有大量用于管理视窗、几何图形、文本、字型、进度条等的GUI的相关功能,而UNIX中,GUI并不是系统的组成部分,所以UNIX提供的系统调用仅仅负责最基本的操作基于win32 API的编程一般是事件驱动的,即在主程序中等待某件事件的发生,然后调用相关的处理方法处理该事件,包括键盘敲击、鼠标移动等,之后更新内部程序状态,而UNIX中每一个程序会包括做各种处理的代码以及从事完成特定服务的系统调用进程创建:UNIX中使用系统调用fork通过复制父进程地址空间开辟子进程,而在windows中,没有子进程的概念,windows中使用CreateProcess这个API来完成fork和execve的功能,创建新的进程,之后新的进程与创建者失去关系,平等的进行操作windows不支持编程实现文件的链接、文件系统的安装、安全属性或信号,当然,windows也同样有大量UN
#技术帖    #操作系统    #os    #unix   
今天写了一个程序:/* * file: main.cc * author: 龙泉居士 * date: 2012-10-05 10:15 */ #include <iostream> #include <sstream> #include <cstdarg> using namespace std; void error (const char * a ...) { char ch; va_list ap; va_start (ap, a); istringstream isstr(a); while (isstr.get(ch)) { if (ch == '%') { isstr.get(ch); switch (ch) { case 's': { char *p = va_arg(ap, char *); cerr << p; break;
#技术帖    #c语言    #技术分享    #va_arg   
执行 sudo vim /boot/grub/grub.cfg 打开 grub.cfg 文件 查找类似下面的配置信息:menuentry 'Ubuntu,Linux 2.6.32-22-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {recordfailinsmod ext2 set root='(hd0,7)' search --no-floppy --fs-uuid --set 7dde7e5c-249c-4128-b148-8ebae100cc7a linux /boot/vmlinuz-2.6.32-22-generic-pae root=UUID=7dde7e5c-249c-4128-b148-8ebae100cc7a ro quiet splash initrd /boot/initrd.img-2.6.32-22-generic-pae}  进行两处修改:在 menuentry 中写入标识,括在括号中,至于标识是什么,完全随意,如“text mode”把 quiet splash 改成 quiet text&n
#技术帖    #ubuntu    #字符界面    #图形界面   
安装及配置1、安装在 ubuntu 中只需执行:sudo apt-get install git 即可安装 github 客户端2、配置执行下面的命令:git config --global user.name 'zeyu203' git config --global user.email 'zeyu203@qq.com' 设置用户名称及邮箱地址创建密钥进入 ~/.ssh 目录执行ssh-keygen -t rsa -C 'zeyu203@qq.com' 生成新的密钥,然后在 github 网站系统中点击右上角的 Account Settings --> SSH Public Keys --> add another public keys 添加本地生成的密钥即可执行ssh –T git@github.com 若出现欢迎信息,说明修改成功命令操作项目的添加 git status -- 查看当前项目下的所有文件状态 git add . -- 将目录下所有内容提交到git本地仓库 git commit -m 'message'
#技术帖    #github    #svn   
Mongo db 与mysql 语法比较传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。 Mongo db 与mysql 语法比较 MySQLMongoDB说明 mysqldmongod服务器守护进程 mysqlmongo客户端工具 mysqldumpmongodump逻辑备份工具 mysqlmongorestore逻辑恢复工具 db.repairDatabase()修复数据库 mysqldumpmongoexport数据导出工具 sourcemongoimport数据导入工具 grant * privileges on *.* to …Db.addUser() Db.auth()新建用户并权限 show databasesshow dbs显示库列表 Show tablesShow collections显示表列表 Show slave statusRs.status查询主从状态 Create table users(a int, b int)db.createCollection("
#技术帖    #mysql    #mongo    #sql   

200x200


[Pastel on Black] text(bold)=ffffff magenta(bold)=8080c0 text=ffffff white(bold)=ffffff green=00ff00

#技术帖    #linux    #unix    #配置文件   
〇、引言最近开始看《linux内核源码完全注释》,虽然之前无论是在《INTEL汇编语言程序设计》、《Orange'S》还是《现代操作系统》上对操作系统的内存管理都已经有过很多的接触,但是重新学习这些东西感觉还是有很多地方很不清晰,很多概念感觉理解起来很混乱,仔细研究了两天,基本上对整个过程和各种基本概念有了一个比较深刻和全面的认识,下面说说我的认识吧 一、分段机制由于分页机制是在分段机制的基础上完成的,所以我们首先介绍分段机制实地址模式中,我们使用段寄存器保存段地址,使用段内变址寄存器保存段偏移地址,这两个组合以后就可以得到物理内存上的物理地址了,但是由于在保护模式中,我们需要对内存加入保护机制,就必须更多的信息,仅仅通过两个寄存器就明显不够了,于是引入了分段机制,在寻址过程中保存更多的保护信息,但是基本的原理还是类似的 程序员熟悉和操作的依然是 32 位变址寄存器保存的逻辑地址,但是此时 16 位段寄存器保存的信息已经不仅仅是段基址了16 位段寄存器中的 0、1 位为 CPL 位,用来标识代码所在段的当前特权级,第2位为 TI 位,用来判断是 GDT(全局描述符表)还是 LDT(局部描述符表),剩下的高 13 位
#技术帖    #操作系统    #os    #现代操作系统   



京ICP备15018585号