07 2015 档案
摘要:BSD Socket网络编程API创建socket对象int socket (int __domain, int __type, int __protocol) :成功返回socket文件描述符,失败返回-1.参数1:socket对象使用的地址簇或协议簇 常用的有PF_LOCAL(本机通信)...
阅读全文
摘要:IP地址定义:struct in_addr{ __u32 s_addr;};in_addr_t inet_addr (__const char * __cp) :把点分十进制IP地址字符串转换为32位IP地址(网络存储顺序)。in_addr_t inet_network (__const ch...
阅读全文
摘要:读写锁书上有读者写者的代码,我实在是懒得实现一遍了。跟之前的代码差不多。多线程异步信号处理int pthread_kill (pthread_t __threadid, int __signo) :发送信号。第二个参数为0时表示检测指定线程是否存在。成功返回0.int pthread_sigmask...
阅读全文
摘要:条件变量通信机制条件变量必须配合互斥锁一起实现对资源的互斥访问使用方法:int pthread_cond_init (pthread_cond_t *__restrict __cond, __const pthread_condattr_t *__restrict __cond_attr) :初始化...
阅读全文
摘要:线程同步机制互斥锁通信机制int pthread_mutex_init (pthread_mutex_t *__mutex, __const pthread_mutexattr_t *__mutexattr) :初始化互斥锁,成功返回0 参数1:要初始化的互斥锁 参数2:定义要初始化的互斥锁属性...
阅读全文
摘要:线程与进程对比1.用户空间对比2.内核空间资源对比在创建线程时,Linux内核仍然创建一个新的PCB来标识这个线程。内核并不认为进程与线程有差别。进程是操作系统管理资源的基本单元,线程时Linux系统调度的基本单元。3.进程线程函数对比创建线程int pthread_create (pthread_...
阅读全文
摘要:共享内存共享内存主要用于实现进程间大量数据传输。共享内存的数据结构定义:系统对共享内存的限制:共享内存与管道的对比:可以看到,共享内存的优势:1.共享内存只需复制2次,而管道需要4次2.共享内存不需要切换内核态与用户态,而管道需要。共享内存效率高!int shmget (key_t __key, s...
阅读全文
摘要:信号量通信机制可以看到,跟消息队列类似,也是包括两个结构。int semget (key_t __key, int __nsems, int __semflg) : 创建信号量集合 第一个参数:ftok产生的key值 第二个参数:创建的信号量个数 第三个参数:权限信息创建信号量例子:#incl...
阅读全文
摘要:消息队列消息队列是消息的链式队列,模型如下:包括两种数据结构:msqid_ds消息队列数据结构msg消息队列数据结构struct msg_msg{ struct list_head m_list; long m_type; //消息类型 int m_ts; //消息大小 ...
阅读全文
摘要:System V, 曾经也被称为 AT&T System V,是Unix操作系统众多版本中的一支。传统上,System V 被看作是两种UNIX"风味"之一(另一个是 BSD)。然而,随着一些并不基于这两者代码的UNIX实现的出现,例如 Linux 和 QNX, 这一归纳不再准确.System V ...
阅读全文
摘要:信号屏蔽信号忽略:系统仍然传递该信号,只是相应的进程不做任何处理信号屏蔽:进程不捕获信号,信号处于未决状态,当不再屏蔽信号时可以捕获之前被屏蔽的信号。信号集数据结构定义:typedef __sigset_t sigset_t;#define _SIGSET_NWORDS (1024 / (8 *...
阅读全文
摘要:signal安装信号typedef void (*__sighandler_t) (int);__sighandler_t signal (int __sig, __sighandler_t __handler) :安装信号处理函数,第1个参数是收到的信号,第2个参数是处理的函数指针,返回值也是函数...
阅读全文
摘要:原文地址:http://blog.csdn.net/wangweixaut061/article/details/6549768原文不让转载,但实在是有用,就拷贝了一小部分过来。全文请点开链接。C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方...
阅读全文
摘要:发送信号在终端用kill命令杀死当前终端r如上, 使用 kill -SIGCONT 2563 时,终端忽略了该信号 使用kill -SIGABRT 2563 时,终端退出。需要重新输入用户名密码登陆。int kill (__pid_t __pid, int __sig) :向指定进程发送信号。...
阅读全文
摘要:有名管道无名管道和有名管道:1. 管道是特殊类型的文件,在满足先入先出的原则写可以读写,不能定位读写位置。2.管道是单向的。3.无名管道阻塞于读写位置,而有名管道阻塞在创建位置。4.无名管道一般只用于亲缘关系进程间通信;有名管道以磁盘文件的方式存在,可以实现本机任意两进程间通信。shell创建有名管...
阅读全文
摘要:文件描述符重定向cattest02>test02test02 2>error >error是追加。cat>test02 2>&1&1 1>test02#include#include#include#include#include#include#include#define BUFFER_SIZE...
阅读全文
摘要:Linux操作系统所支持的主要进程间的通信机制。无名管道 PIPEcat test.txt| grep hello上面这种管道,将一个命令的输出作为另一个命令的输入,而这种管道是临时的,命令执行完成后将自动消失,称为无名管道。int pipe (int __pipedes[2]) :创建无名管道 ...
阅读全文
摘要:守候进程启动方式: 在系统启动时由/etc/rd.d目录下的启动脚本启动 利用inetd超级服务器启动 有cron命令定时启动,以及在终端用nohup命令启动守护进程编程要点(1)屏蔽有关控制终端操作的信号,防止守护进程正常启动之前,控制终端受到干扰退出或挂起。for(i = 1; i #in...
阅读全文
摘要:修改进程用户相关信息int access (__const char *__name, int __type):检测当前进程是否拥有对某文件的访问权限 参数1:待访问文件 参数2:相应权限 4(R_OK 可读),2(W_OK 可写), 1(X_OK 可执行), 0(F_OK 文件存在) 如果具...
阅读全文
摘要:回收进程用户空间资源仅调用退出函数的进程属于一个僵死进程,没有释放进程控制块PCB。void exit (int __status):退出进程。会以反序执行on_exit()和atexit()中注册的清理函数,刷新流缓冲区。执行成功没有返回值,参数status用来标识退出状态返回给父进程;否则返回-...
阅读全文
摘要:在进程中运行新代码execX系列函数可以在当前子进程中运行新程序。当进程调用该系列任意一个函数时,该进程的用户空间资源完全由新程序替代。这些函数的区别:指示新程序的位置是使用路径还是文件名,若是文件名则在系统的$PATH环境变量所描述的路径中搜索该程序。 在使用参数时,是使用参数...
阅读全文
摘要:概念:进程号(PID):系统标识一个进程的正整数父进程号(PPID):父进程的进程号进程组号(PGID):进程组是一个或多个进程的集合。会话:一个或多个进程组的集合。控制终端的含义我不是很理解?函数/命令:ps aux:查看当前系统所有进程的基本属性getpid():获取当前进程PIDgetppid...
阅读全文
摘要:一、端口设备类型1、显示设备基本信息cat /proc/tty/drivers里面包括了:当前终端:/dev/tty前台控制台终端:/dev/console用于创建虚拟终端的:/dev/ptmx虚拟终端从设备:pty_slave虚拟终端主设备:pty_master物理串口:serial实际的物理串口
阅读全文
摘要:题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路:这题卡在没想到exponent可以是负数了...自己想了一个比较好的方法,非递归,O(logN)算法举例说明吧:设base = 2.5, exponent = 99我们每次都会...
阅读全文
摘要:题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。注意负数同样采用减1的方法消位!int NumberOf1(int n) { int count = 0; for(;n != 0; n &= (n - 1), count++); ...
阅读全文
摘要:题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。题目不难,就是自己做的不好。脑子不清晰,也忘了考虑边界条件。好的思路:由于空格变成%20多出了两位,所以最后字符串一定变长了。先统计有多少...
阅读全文
摘要:题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。自己的思路实在是傻×了,先看下正确思路吧把当前数字定位在第一行,最后一列。如果数字小则增大行,如果数字大则减小列!O(M+N)...
阅读全文
摘要:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。思路:本题的关键在于不能使用除法。故需要分别计算A[0]~A[i - 1] 的乘积 和 A[i +...
阅读全文
摘要:题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。思路:这道题是做过的,但是...
阅读全文
摘要:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路:自己对知识使用的灵活性不够...如果只有一个只出现一次的数字直接异或就可以了,但两个怎么办呢?后来看得答案:先异或一遍最后的数字是这两个不一样的数字异或的结果。那么这个异或数字为1的位一定是这两个数字不...
阅读全文
摘要:看《Linux高级程序设计》的笔记设有一个hello的可执行文件①显示该文件的基本信息ls hello -l②文件基本情况file hello③列出文件的存储区域情况size hellotext(代码区): 存放代码和有const修饰的变量和字符串常量。data(静态数据/全局初始化数据区):存放已...
阅读全文
摘要:设要调试的文件是 bug.c先用 gcc -o bug -g bug.c 生成可执行文件输入 gdb bug //bug是待调试的可执行文件的名字输入 list(简写为l) 可查看源代码输入 run(简写r) 运行程序输入 where 查看程序出错位置输入 pirnt(简写p) 后面跟变量名 查看...
阅读全文
摘要:方法一:不断填坑,一次确定一个值。http://blog.csdn.net/morewindows/article/details/6684558#includevoid qsort(int *array, int len){ int value, start, end; if (len...
阅读全文
摘要:1.C++中的参数传递机制:值传递、指针传递、引用传递2.C++的内部类和外部类:一个讲得不错的博客,不过不让转载:C++内部类3.static 可以修饰局部变量、全局变量和函数。 不可修饰类!4.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是:出错!友元函数不是成员函数,必须...
阅读全文
摘要:DHCP客户端使用的UDP端口是68DHCP服务器使用的UDP端口是67DHCP:客户向服务器发送DHCP发现报文(源IP:全0 还没有IP,目的IP:全1 在本网络广播),可以多个DHCP服务器向客户发送DHCP提供报文,客户端选择一个并发送DHCP请求报文,服务器发送DHCP确认报文。租用期超过...
阅读全文
摘要:看了两天的各种博客,终于把MapReduce的原理理解了个大概。花了1个小时画了个流程图。大家看看,有不对的地方欢迎指正。关键步骤:Map, Reduce就不多说了。记录一下我看了很久的部分:1. Shuffle :指的是从Map输出到Reduce输入之间的操作。期间有三次排序操作,Partitio...
阅读全文
摘要:好文章的网址:hadoop shuffle机制中针对中间数据的排序过程详解(源代码级) Hadoop mapreduce原理学习 与 Hadoop 对比,如何看待 Spark 技术?深入理解Hadoop集群和网络Hadoop实战-中高级部分 之 Hadoop MapReduce工作原理 :htt...
阅读全文
摘要:找到所有和为S的连续整数序列,序列长度>=2我的思路:数学法,限定首元素范围,计算序列长度。书上解法:用small和big两个游标记录序列的开始和结束位置,调整游标。我的解法:/*直接用数学方法做的等差数列公式 2*n*a1+n(n-1)/2 = s; 由n>= 2 得 a1 > FindCo...
阅读全文
摘要:思路dp很清楚,就是要注意细节。int FindGreatestSumOfSubArray(vector array) { if(array.empty()) return 0; int sum = array[0], tempsum = array[0]; //注意初始...
阅读全文
摘要:我的思路:先翻转链表,再打印。网上思路:利用栈的后进先出性质;或者用递归,本质也是栈。我的代码:#include using namespace std;struct ListNode { int val; struct ListNode *next; ListN...
阅读全文
摘要:大数据数据处理模型:1.Google的MapReduce是一个简单通用和自动容错的批处理计算模型。但,不适合交互式和流式计算!2.Storm3.Impala4.GraphLab5.SparkSpark: 伯克利大学提出, RDD概念(一种新的抽象的弹性数据集),MapReduce的一种扩展。RDD本...
阅读全文
摘要:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:关键注意①每一圈中四条边的边界,要每...
阅读全文
摘要:数组中任取两个数字,如果前面的数字大于后面的数字称为一个逆序对如:1,2,1,2,1 有3个逆序对思路:知道O(N2)肯定是错的。开始想hash,试图找到O(n)的算法,想了很久,找不到。后来想到排序,用原数组与排好序的数组对比,我写的快排,还是不对。想了几个小时,无奈看答案,原来是用变形的归并排序...
阅读全文
摘要:二维数组有两种形式:①在栈上: int a[4][4] = {...};②在堆堆上: int ** a = new int *[4]; for(int i = 0; i < 4; i++) a[i] = new int[4];这两种情况下,二维数组做形参的传参方式是不一样的...
阅读全文
摘要:思路:应该是用二分查找分别找到该数字第一次和最后一次出现的位置,相减即可。O(logn)int findLeft(int a[], int n, int num){ int l = 0, r = n - 1; while(l = 0 && a[l] == num) //找左边界 ...
阅读全文
摘要:Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree is symmetric: 1 / \ ...
阅读全文
摘要:Given a binary tree, return thelevel ordertraversal of its nodes' values. (ie, from left to right, level by level).For example:Given binary tree{3,9,2...
阅读全文
摘要:1.求一个字符串中连续出现次数最多的子串。我自己的思路:遍历所有可能的子串的长度,遍历所有可能的起始位置,后面遍历查找有多少连续相同的子串,更新最大次数。我是用C实现的。#include#include#includechar * maxTimeSubStr(const char * str_in)...
阅读全文