java,架构,编程语言相关专家
1线程概念 1.1什么是线程 1.1.2线程和进程的关系 1.轻量级进程(light-weightprocess),也有PCB,创建线程使用底层函数和进程一样,都是clone. 2.从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表示相同的 3.进程可以蜕变成线程 4.在美国人眼里,线程就是
1.Cygwin下载,配置,参看本人ndk开发。 给cygwin配置环境变量; 2.eclipse for java,javaee的话再安装cdt插件,eclipse for c,c++不需要. 3.安装好后eclipse的配置问题. 新建工程: 注: 第一:选Executable 而不是上面的GNU Autotools 第二:如果右边没有 Cygwin GCC选
在linux 中每一个进程都由task_struct 数据结构来定义. task_struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段. 当我们调用fork() 时, 系统会为我们产生一个task_struct结构。然后从父进程,那里继承一些数据, 并把新的进程插入到进程树中, 以待进行进程管理。因此了解task_struct的结构对于我们理解任务调度(在
1进程组 一个或多个进程的集合,进程组ID是一个正整数。用来获得当前进程组ID的函数。 pid_t getpgid(pid_t pid) pid_t getpgrp(void) 获得父子进程进程组 运行结果: 组长进程标识:其进程组ID=其进程ID 组长进程可以创建一个进程组,创建该进程组中的进程,然后终止,只要进程组中有一
1终端 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进 程的控制终端(ControllingTerminal),在讲进程时讲过,控制终端是保存在PCB中的信 息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。默认情况下(没有重定向),每个进程的标准输入、标准输出和标准
1信号产生原因 2.进程处理信号行为 manpage里信号3中处理方式: SIG_IGN SIG_DFL 默认Term动作 a signal handling function 进程处理信号 A默认处理动作 term
1查看信号的方式:man 7 signal,通过这个命令可以查看到所有信息。 2查看信号kill -l 注意,后面的32个信号表示的实时信号。 会发现一个规律,前32种信号会有各种不同的名称,后32种会以“SIGRTMIN”或者“SIGRTMAX”开头,前者是从unix继承下来的信号,称为不可靠信号(也称为非实时信号),后者为了解
1关于Makefile,在编写Makefile的时候,Makefile这个名称第一个字母要大写。并且必须是Makefile.一个Makefile就相当于: #目标:依赖(条件) # 命令 à注意这里前面是一个tab 2案例: A:创建一个项目calc,案例项目结构如下: B编写mul.c C编写
1mmap()依赖的头文件 #include <sys/mman.h> 2函数声明: void *mmap(void *addr, size_t length, intprot, int flags, intfd, off_t offset); int munmap(void *addr, size_t length);
1fifo有名管道 创建一个有名管道,fifo 2.fifo依赖的头文件 #include <sys/types.h> #include <sys/stat.h> 函数声明 int mkfifo(const char *pathname, mode_tmode); 3.fifo的写端应用
1进程间通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不 到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用 户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程 间通信(IPC,InterProcess Communication)。 2pip
1 wait/waitpid 僵尸进程: 子进程退出,父进程没有回收子进程资源(PCB),则子进程变成僵尸进程 孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为1号 进程init进程,称为init进程领养孤儿进程 2依赖的头文件 #include <sys/types.h> #include <
1修改进程资源限制,软限制可改,最大值不能超过硬限制,硬限制只有root用户可以修改 查看进程资源限制 cat /proc/self/limits ulimit -a 2getrlimit()函数和setrlimit()函数 A依赖的头文件 #include<s
1.exec族依赖的头文件 #include<unistd.h> extern char**environ; 2函数声明 //第一个参数:可执行程序所在的绝对位置 //第二个参数:可执行程序运行时所需的参数,这里是一个可变参数,每个参数之间用逗号分割 //参数结束时,最后一个参数是:NULL int execl(constc
1fork()函数 子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。fork调用一次返回两次,有以下特点: A:父进程中返回子进程ID B:子进程中返回0 C:读时共享,写时复制 2fork()依赖的头文件 #include <unistd.h> 3fork()函数说明: pid_tfork(voi
1进程环境 libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。例如: 运行结果: 2.env命令可以查看进程信息 3.echo $环境变量名 得出环境变量的值 4getenv() A依赖头文件 #include<
1操作系统会为每个进程分配0到4G的虚拟地址 2.关于虚拟内存和物理内存之间的关系 总结: A程序管理内存的最小单位是page(4096Byte),如果需要的内存不够4096字节,实际上开辟的也是4096字节。 B每个程序对应独立的虚拟内存,调用的时候先找自己的虚拟内存,然后实质上是通过虚拟内存找物理内存。 C每个进程共享操作系统的
1dup函数和dup2函数 #include<unistd.h> int dup(intoldfd); int dup2(intoldfd, int newfd); dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。如果两个文件描述符指向同一个file结构体,File Status Fl
1 mkdir依赖的头文件 #include<sys/stat.h> #include<sys/types.h> 2.函数声明: int mkdir(const char *pathname, mode_tmode); 3.案例说明: 运行结果:
1 opendir所需的头文件 #include<sys/types.h> #include<dirent.h> 2函数声明 DIR *opendir(const char *name); DIR *fdopendir(int fd); 通过opendir来打开一个文件夹 3readdir依赖的头文件 #i
1chdir依赖的头文件 #include<unistd.h> 2函数定义 int chdir(const char *path); int fchdir(int fd); 函数说明: chdir的作用是改变工作目录 4getcwd依赖的头文件 #include<unistd.h> 5函数定义:
1 link()依赖头文件 #include<unistd.h> 2函数定义 int link(const char *oldpath,const char *newpath); 函数说明: link() creates a new link (also known as a hard link) to an existing file.
1.依赖头文件 #include<unistd.h> #include<sys/types.h> 2.函数定义: int truncate(const char *path,off_t length); int ftruncate(int fd,off_t length); 函数说明: The truncate() and ftruncate()
1.依赖的头文件 #include<sys/types.h> #include<utime.h> 2函数声明 int utime(const char *filename, const struct utimbuf *times); #include<sys/time.h> int utimes(const char *filename,co
1.依赖的头文件 #include<unistd.h> 2.函数定义: //通过传入path的方式,改变和文件的拥有关系,如果他是一个符号链接,则跟踪它 int chown(const char *path, uid_t owner, gid_t group); //通过文件描述的方式进行修改用户所有组等的情况 int fchown(int fd, uid_t ow
1.依赖的头文件 #include<sys/stat.h> 2.函数定义: //通过传入path中给定的文件名的方式来改变文件制定的权限 int chmod(const char *path,mode_t mode); //通过传入文件描述符的方式为一个文件重设权限 int fchmod(int fd,mode_t mode); 注意:如果使用Linu
1.依赖的头文件 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> 2.函数定义: //通过传入文件路径,struct stat结构体指针的方式 int stat(const char *path, struct stat *buf); //通过文件描述
1.Windows下的文件系统是:NTFS 2.Linux下的文件系统是ext2,ext3,最新的是ext4 3.一般的硬盘以512个字节为一个扇区 4.磁盘中一个Block的大小时扇区的倍数,PC默认设置的大小是4096的大小 5.关于文件系统(以ext2文件系统为例) 6.文件名并没有存在inode里面 7.目录项,一个目录项默认的大小时4096字节的大小 里面记录的
1 vimrc是vim的配置文件,可以修改两个位置:分别是: A:/etc/vim/vimrc 这是默认的系统配置的vimrc B:~/.vimrc :当前用户目录下的 .vimrc 用户目录下的vim配置级别高 setencoding=gb2312 set guifont=Luxi/ Mono/ 9 " 设置字体,字体名
首先简述自己的系统配置:win7+ ubuntu12.04 linuxQQ 有各种版本,这里介绍两种:linuxQQ 和 wineQQ 1 ------linuxqq是QQ简化版,功能很少,界面很差,但是安装简单 下载地址:http://im.qq.com/qq/linux/ 可以选择对听版本的系统以及QQ 。这里建议下载tar.gz的版本,
本文导航 第1页:如何在linux版本中安装QQ 第2页:linuxqq安装下载完成 第3页:linuxqq安装完成 第4页:linuxqq的体验 第5页:使用tar.gz 包安装 1如何在linux版本中安装QQ 对于大多数网友来说,开源Linux发行版未能成为市场主流应用,其很大一部分原因是支持软件相对较少,娱乐功能有限,导致很多用户放弃
以前公司有的项目也用这个东东,但我的项目中还是始终使用svn,华为以前用的是VSS,不过后来也开始推别的了,如CVS(2006年,SVN貌似还不太火)。 Git这个东东不必说太多,想来大家也都听说过。最早开始是由Ruby程序员们发起的。记得2008年接触Ruby和Rails的时候还没有这个东东,代码在线管理还是百花齐放。Ruby是日本的家伙搞出来的,日本有个代码托管网站叫he
1安装nfs(网络文件系统)服务器 共享的原理: 安装命令: sudo apt-get install nfs-kernel-server 2设置/etc/exports配置文件 添加以下这行配置 其中: *表示所有ip,如果想指定ip,可以把*换成你自己的ip地址。 rw:表示只读权限,如果想变成只读的,修改配置为ro sync:表示同步的方式。任何人对这个目录的修改,其它人都可以
1安装ftp服务器的条件 电脑联网 2.执行以下命令: 3配置vsftpd.conf 命令:sudo vi /etc/vsftpd.conf 在配置文件(vsftpd.conf最后面)中添加以下配置: 要注意的是:anno_root=/home/toto/ftp要含有ftp这个文件夹,并且这个文件夹要和普通文件的权限是相同的。不能是最
一设置磁盘挂载(磁盘默认挂载到了/media目录下了) A:插入移动硬盘 B:对虚拟机进行设置(虚拟机—>可移动设备àtoshibaExternal USB 3.0(这个是我的移动硬盘插上去之后显示的一项)à连接) 有时候出现以下现象 C:检测存储设备名称 sudofdisk –
#include <iostream> #include <cstdlib> #include <cctype> //字符串判定 using namespace std; const int MAX = 1024; double operation(char *str); c
客户端代码: #include <iostream> #include<string> #include <boost/asio.hpp> #include <stdlib.h> using namespace std; using namespace boost::as
1.带有虚函数的类会多出四个字节的大小,这是一个指针的大小,这个指针的用途是指向虚函数表。 2.继承是虚函数表的顺序 #include <iostream> using namespace std; class H { virtual void M() { c
客户端代码 #include <boost/asio.hpp> #include <iostream> #include <stdlib.h> using namespace std; using namespace boost::asio; void main()
1正则表达式,案例1(如果使用的boost库是64位的,要把VS设置成支持64位的,这样的化,才可以运行通过) #include <boost/regex.hpp> #include <locale> #include <iostream> #include <string> usi
1. boost::unordered_set(优势:查找非常方便) #include <iostream> #include<boost/unordered_set.hpp> #include<string> using namespace std; void main() {
1自己实现一个智能指针的功能 #include <iostream> #include <string> #include <vector> #include <algorithm> #include <functional> #include <stdlib.h&
#include <iostream> #include <vector> #include<algorithm> #include<boost/thread.hpp> #include <windows.h> using namespace std; using na
1.RAII:资源申请即初始化: #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <stdlib.h> #include <string> using namespace std; class mys
1.Boost之ref,案例: #include<iostream> #include <vector> #include <boost/bind.hpp> #include <boost/function.hpp> using namespace std; using n
1第一个function案例 #include<iostream> #include <boost/function.hpp> using namespace std; using namespace boost; int main(int argc,char *argv[]) {
1.Boost:array,头文件内容 2.boost:array使用案例 #include<boost/array.hpp> //boost所属的头文件 #include <iostream> #include <string> using namespace std;
1.Boost:bind #include <iostream> #include <boost/bind.hpp> using namespace std; using namespace boost; int f(int a, int b = 12) { re
1异常捕获案例1 #include<iostream> #include<string> usingnamespacestd; //标识错误的类型 classwrong{}; intintdiv(inta,intb) { try { if
1合成模式的核心内容是: 略: 2状态模式的作用:略。 3状态模式具体描述 合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。 合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。 合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。 Mary今天过生