Linux学习历程
文章平均质量分 67
createchance
一个喜欢Android,linux开源技术的人,简单,普通,但是不平凡。
展开
-
Debian Linux包管理机制
Debian是linux史上的一个非常重要的发行版(话说,笔者写这篇博客时使用的系统就是Debian 8.6,嘿嘿~~在工作中使用debian这两年来,感觉debina是异常稳定哦,注意是异常稳定,至少我这里从来没有出现过各种奇怪的灵异现象~~),这个发行版本是很多Linux的上游版本,比如Ubuntu等著名发行版。Debian的地位的取得不仅仅是因为它创造了一个坚如磐石的Linux发行版,更多的原原创 2017-01-12 10:52:12 · 5229 阅读 · 2 评论 -
OpenJDK和JDK区别
使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的openjdk,那么到底什么是openjdk,它与sun jdk有什么关系和区别呢? 历史上的原因是,openjdk是jdk的开放原始码版本,以GPL协议的形式放出。在JDK7的时候,openjdk已经成为jdk7的主干开发,sun jdk7是在openjdk7的基础上发布的,其大部分转载 2013-12-16 11:25:49 · 2253 阅读 · 0 评论 -
结构体成员内存分布与对齐
先来看一段代码,这是曾经的IBM和微软的笔试题:#include struct student{ char name[10]; int age; double score;};int main (void){ using namespace std; struct student st; cout << sizeof(st) <<原创 2013-08-16 18:39:04 · 1567 阅读 · 0 评论 -
su和su -的区别
前几天,在一次项目中,犯了一个很低级的错误,但是没弄明白是什么问题。情况是这样的,我们在做灾备,重启系统化,以root用户权限,通过 su oracle ,进去后,oracle的rac 无法正常启动,我没细看,一直在找其他的原因,最后经过同事提醒,说应该执行 su - oracle。果然如他所说,进去后正常启动。 今天忽然想起,又仔细查看了资料,做个笔记,备忘。也提醒自己注意细节。转载 2013-12-14 11:27:05 · 1363 阅读 · 0 评论 -
强悍的VIM,强悍的配置文件!!!
map :call SaveInputData()func! SaveInputData() exec "tabnew" exec 'normal "+gP' exec "w! /tmp/input_data"endfunc"colorscheme torte"colorscheme murphy"colorscheme desert "colorscheme dese原创 2013-12-07 15:13:22 · 2116 阅读 · 0 评论 -
C语言编写五子棋程序
五子棋游戏我们大家很多人都玩过,规则简单但是内容千变万化,今天我用C语言写了一个五子棋程序,由于时间仓促程序中难免会有BUG,希望您多多指正阿!!程序的功能:两个人轮流下子,在输入下子的时候,可以输入r来进行悔棋,也可以输入q来退出程序。在本程序中,一共有5个模块,分别为:1.生成棋盘模块:void create_board(char (*board)[N]); 本模原创 2013-12-07 14:56:22 · 7749 阅读 · 2 评论 -
有关C语言中bool类型的思考
在C99标准中加入了非常好用的bool类型,但是今天在写程序的时候,发现一个很有意思的问题,程序如下:#include #include int main(void){ bool a = -1; if(a+1) printf("aaaaaaaaaaaaa\n"); return 0;原创 2013-11-27 18:56:06 · 1277 阅读 · 1 评论 -
C语言中数值的移位运算
在C语言中的数值可以实现移位运算,由于数值分为无符号(unsigned)和有符号(signed),这两种的数值运算方式不一样。无符号数值的运算很简单,总结一句话就是移位和补零,而有符号数值的移位需要注意一下。当数值是有符号的时候,如果是左移的话就是移位和补零,所以一个正数可以通过移位变成一个负数或者是零;但如果是右移的话,就不太一样。由于是有符号数,可能发生逻辑右移,也可能发生算术右移,这原创 2013-11-27 18:48:57 · 2713 阅读 · 0 评论 -
计算机为什么采用补码的形式存储数据?
在计算机内部,所有信息都是用二进制数串的形式表示的。整数通常都有正负之分,计算机中的整数分为无符号的和带符号的。无符号的整数用来表示0和正整数,带符号的证书可以表示所有的整数。由于计算机中符号和数字一样,都必须用二进制数串来表示,因此,正负号也必须用0、1来表示。通常我们用最高的有效位来表示数的符号(当用8位来表示一个整数时,第8位即为最高有效位,当用16位来表示一个整数时,第16位即为最高有效位转载 2013-11-27 12:53:08 · 5301 阅读 · 0 评论 -
并发服务器的实现(进程与线程)
总体来说,服务器的运行模式大体有两类:循环服务器和并发服务器。所谓的循环服务器就是说他给客户端提供的服务时一个接着一个的,不能同时服务,也就是说当一个用户使用服务器的时候,其他用户不没能使用只能等待。这显然不符合实际服务器的要求,而并发服务器就可以很好地解决这个问题。并发服务器能够同时为多个客户端服务,同时并发服务的能力是服务器性能的一个重要指标。并发服务器的实现总体有以下几种方法:① 服原创 2013-09-27 22:01:33 · 2231 阅读 · 0 评论 -
关于select函数中timeval和fd_set重新设置的问题
select原型: int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 和select模型紧密结合的四个宏:FD_CLR(int fd, fd_set *set);FD_ISSET(int fd, fd_set *set);FD转载 2013-09-26 10:52:27 · 2121 阅读 · 0 评论 -
64位linux中使用inet_ntoa报错处理
最近一直使用linux mint 15,我用的是64位操作系统,在进行网络编程的时候,发现一个问题,请看源码:/*get_ip_by_name.c*/#include #include #include #include #include #include int main(int argc,char *argv[]){ struct hostent *h; i原创 2013-09-25 15:17:06 · 2144 阅读 · 0 评论 -
linux网络编程必看书籍
首先要说讲述计算机网络和TCP/IP的书很多。 先要学习网络知识才谈得上编程讲述计算机网络的最经典的当属Andrew S.Tanenbaum的《计算机网络》第五版,这本书难易适中。《计算机网络(第5版)》是国内外使用最广泛、最权威的计算机网络经典教材。目前已经是第五版,本书作者80年代就开发出MINIX,是一个用于操作系统教学的类UNIX(的小型操作系统。而转载 2013-09-22 15:46:34 · 1334 阅读 · 0 评论 -
C语言实现线性存储之连续存储
在数据结构中,数据的存储方式最简单的是线性存储,而线性存储中分为连续存储和链式存储,今天我们实现连续存储在本程序中使用malloc函数构造一个连续存储的内存空间,接着实现对其增,删,改,查,追加,插入等功能,并实现了菜单式界面,由用户自由选择如何对申请到的空间操作在菜单界面下,用户可以输入q来退出程序源代码:/************************************原创 2013-12-17 20:46:05 · 1395 阅读 · 0 评论 -
scanf函数的特点
今天闲来无事,写个小程序试试scanf的特性,发现:scanf函数在接受输入的时候是分类型的:当接受的是字符型的时候即%c,这时他会接受回车符;当接受的是数值型(如整形,浮点型)的数据的时候,他不会接受回车符。如下代码:/************************************************************************* > Fi原创 2013-12-17 18:59:03 · 2294 阅读 · 0 评论 -
linux内核编码风范CodingStyle(中文版)
Chinese translated version of Documentation/CodingStyleIf you have any comment or update to the content, please post to LKML directly.However, if you have problem communicating in English you翻译 2013-12-18 14:38:18 · 2670 阅读 · 0 评论 -
Linux中的共享库之版本管理
共享库也就是动态库,在linux中是随处可见的,这是由于动态链接有这众多优点,因此大量的程序开始使用动态链接的机制,所以你才会在linux这样的操作系统中看到大量的动态链接库的存在。但是随着linux系统架构的成熟,应用和系统软件生态系统的繁荣,导致linux中的动态库数量越来越多,并且同一个共享库还会有不同的版本,这个时候如果没有一个良好的动态库管理机制,那么势必会给长期的维护,升级造成极大的困难原创 2016-08-13 12:10:20 · 2272 阅读 · 0 评论 -
蓝牙的配对和连接的建立过程
蓝牙的建立过程是一个复杂的过程,即使有过相当一段工作和使用经验的人,如果不仔细去了解还是理解不全。平时我们用蓝牙耳机听音乐,和不同的设备共享文件,打电话等,都有一个配对--连接--传输数据的过程。配对,其实就是一个认证的过程。为什么不配对便无法建立连接?任何无线通信技术都存在被监听和破解的可能,蓝牙SIG为了保证蓝牙通信的安全性,采用认证的方式进行数据交互。同时为了转载 2014-05-27 20:23:26 · 4357 阅读 · 0 评论 -
判断机器的大小端常用的程序
我们知道机器的CPU分为大端和小端,但是如何通过程序区判断呢?这里给出一个常用的,比较好用的办法,先看程序:/************************************************************************* > File Name: HostOrder.c > Author: Baniel Gao > Mail: createchance原创 2014-04-08 20:55:39 · 1491 阅读 · 1 评论 -
求一个文本文件中有多少个单词的方法
需求是给出一个文本文件,求出其中有多少个单词(不用判断单词是否为真的英语单词)。分析:因为不需要判断是否为真的英语单词,这就简单多了。只要以空格,TAB,标点符号等非字母间隔的字符串都是单词(不考虑连字符-)。我的解决方法是判断一个单词,只要满足一个是字母的字符后一个字符不是字母,即可算是一个单词。程序如下:系统IO方式:/*******************************原创 2014-04-14 16:49:39 · 2568 阅读 · 1 评论 -
一道C语言编程比赛题(时钟追赶问题)
问题描述:The three hands of the clock are rotating every second and meeting each other many times everyday. Finally, they get bored of this and each of them would like to stay away from the other two.原创 2014-04-14 16:26:29 · 3172 阅读 · 0 评论 -
ramdisk的模拟实现
在linux系统中有一种文件系统很特殊,他便是ramdisk,当然完全的ramdisk已经由于其对内存容量的要求已经没人使用了,但是他的升级版本cramfs确实很瘦欢迎,尤其是在嵌入式设备中,当你想创建一个文件系统而又不想让人对其中的文件进行修改,那么cramfs便是很好的选择。在我的这个程序中,模仿ramdisk原理,从内存中开辟一块内存(8M),然后对其进行格式化,挂载使用。当然,这一切的任务原创 2014-02-24 19:44:23 · 2058 阅读 · 0 评论 -
SQLite实现在线电子词典
需求:服务器:1).提供英英方式的单词查询2).同时记录用户的查询历史2).客户机登陆需要密码客户机:1).登陆需要密码, 并且提供注册新用户功能2).用户的查询即时给予回复3).用户可以查询自己的查询历史4).用户也可以清除自己的历史记录下面是源码, 由于时间仓促,代码难免比较粗糙,希望谅解!server.h:原创 2014-01-15 21:02:38 · 7344 阅读 · 4 评论 -
Linux C IO编程学习笔记(第一天:标准IO)
首先说一下输入输出的概念,所谓的输入输出就是相对于程序而言的,凡是讲数据输送到程序中的过程就是输入,相反就是输出然后,在linux中的IO分为两种,一种是文件io:是由内核提供的,比较简洁,低级IO,没有缓存,另一种是标准IO:是由标准C库提供,功能复杂高级IO,有缓存那么缓存可分为以下几种:1.行缓冲:系统不多见,多用于跟用户交互,当一行满的时候刷新缓冲,一行以\n结束2.满缓冲原创 2013-12-25 19:17:03 · 1586 阅读 · 0 评论 -
球钟问题的解决--栈和队列
球钟问题描述:球钟是一个利用球的移动来记录时间的简单装置。它有三个可以容纳若干个球的指示器:分钟指示器,五分钟指示器,小时指示器。若分钟指示器中有2个球,5分钟指示器中有6个球,小时指示器中有5个球,则时间为5:32。 工作原理:每过一分钟,球钟就会从球队列的队首取出一个球放入分钟指示器,分钟指示器最多可容纳4个球。当放入第五个球时,在分钟指示器的4个球就会按照他们被放入时的相反顺序原创 2013-12-21 15:08:17 · 4015 阅读 · 2 评论 -
C语言链表实现队列操作
还是操作队列,但是这次换成链表,但是要注意出队的操作。一般的思维是在出队的时候,删除头结点的下一个节点,这样的话确实可以将队列中的节点全部删除,但是如果我们将最后一个节点删除的时候,我们的算法就将tail指针赋值为NULL,这时如果再进行入队操作的时候,就会发生段错误。为什么呢?因为tail指针这是的值已经是NULL了,再将tail的后面接节点的话就会访问非法的内存空间。所以我们在出队操作的时原创 2013-12-20 17:19:32 · 4869 阅读 · 2 评论 -
C语言连续存储实现队列机制
所谓队列,就是如同生活中的队列一样,拥有以下性质:1).每次加入一个元素时,必须在队尾加入2).每次拿走一个元素时,必须从对头拿走总结起来也就是先进先出,后进后出。从存储上看,队列有两种实现方式,一个是连续存储,一个是离散存储。连续存储就类似于数组,而离散存储就类似于链表,这里我们先实现比较简单的连续存储:由于队列的操作可以在对头也可以在队尾,也就是说他可以在两端操作,这样我们原创 2013-12-20 13:19:00 · 1441 阅读 · 0 评论 -
C语言单向循环链表解决约瑟夫问题
据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因原创 2013-12-19 21:10:39 · 3236 阅读 · 0 评论 -
线程实现生产者消费者实验
生产者消费者问题描述如下:有一个有限缓冲区和两个线程,生产者和消费者,他们分别不停地把产品放到缓冲区和从缓冲区拿走数据,一个生产者在缓冲区满的时候必须等待,而消费者在缓冲区空时也必须等待,又因为缓冲区时临界资源,故要实现两个线程之间的互斥访问。在本实验中采用管道来模拟有限缓冲区,并使用信号量来解决同步和互斥问题。在这里我们使用三个信号量:mutex,avail,full。其中两个信号量av原创 2013-09-20 17:11:21 · 2377 阅读 · 0 评论 -
gcc中-pthread和-lpthread的区别
用gcc编译使用了POSIX thread的程序时通常需要加额外的选项,以便使用thread-safe的库及头文件,一些老的书里说直接增加链接选项 -lpthread 就可以了,像这样:Shell代码 gcc -c x.c gcc x.o -ox -lpthread 而gcc手册里则指出应该在编译和链接时都增加 -pthread 选项,像这样:S原创 2013-09-20 10:56:50 · 12398 阅读 · 0 评论 -
VC++6.0中各种文件的作用
VC++ 6.0是一款很经典的C/C++开发工具,虽然是1998年的东西了,但是现在使用依然很广!在用它开发的时候,会发现在建立的工程的文件夹里面,有很多文件,各种后缀名。在这里呢,我主要说一下各个文件的作用是什么: DSW:全称是Developer Studio Workspace,最高级别的配置文件,记录了整个工作空间的配置信息,她是一个纯文本的文件,在vc创建新项目的时候自动生原创 2013-08-13 19:09:23 · 1858 阅读 · 0 评论 -
C++按值和按址传递对象的思考和优化
C++是一门面向对象(OOP)编程语言,在这门语言中也有函数,函数的参数可以是变量数值,当然也可以是对象。所以,传统地就有关于对象是按值传递还是按址传递的讨论。在C语言中,按值传递在很多情况下可以出色地完成任务,而且也很好理解,但是在C++中,因为有了类的对象这个可能的庞然大物(指他的数据特别大),如果还用传值的方式进行的话,会很浪费内存空间。本文就具体讨论这个问题。在C++中,将一个对象原创 2013-08-25 12:54:45 · 1704 阅读 · 0 评论 -
汉洛塔递归实现的思考(C语言)
汉洛塔是古印度神话产生的智力玩具,他的玩法是,有三个柱子分别为A,B,C,A柱原创 2013-08-24 18:58:08 · 2330 阅读 · 0 评论 -
dup和dup2函数(ZZ)
dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr。这两个函数的 原形如下: #include int dup( int oldfd );int dup2( int oldfd, int targetfd ) 利用函数dup,我们可以复转载 2013-08-09 16:08:00 · 1248 阅读 · 0 评论 -
fcntl函数说明
(1)fcntl函数说明前面的这5个基本函数实现了文件的打开、读写等基本操作,这一节将讨论的是,在文 件已经共享的情况下如何操作,也就是当多个用户共同使用、操作一个文件的情况,这时,Linux 通常采用的方法是给文件上锁,来避免共享的资源产生竞争的状态。文件锁包括建议性锁和强制性锁。建议性锁要求每个上锁文件的进程都要检查是否有锁存,并且尊重已有的锁。在一般情况下,内核和系统都不使用建议转载 2013-08-09 16:06:07 · 1695 阅读 · 0 评论 -
C/C++中程序在使用堆内存时的内存复用问题
在一个C/C++程序中,如果使用了堆内存的管理机制,那么内存究竟是怎么分配与回收的呢?先看一个程序:#include using namespace std;int main (void){ int *x = new int; int *y = new int; *x = 1; *y = 2; cout << "*x = " << *x <原创 2013-08-20 16:36:27 · 2345 阅读 · 0 评论 -
UNIX环境高级编程中的apue.h错误
UNIX,C编程,环境搭建,apue.h原创 2013-08-07 10:01:50 · 2181 阅读 · 0 评论 -
C语言中的各种修饰符
C语言 修饰符 指针原创 2013-08-04 15:38:27 · 2189 阅读 · 0 评论 -
C语言中字符串转换为数字
C语言 字符串 数字 转换原创 2013-07-26 22:24:05 · 2495 阅读 · 0 评论 -
C语言中的命令行参数
C语言 main函数 命令行参数原创 2013-07-26 18:31:33 · 2194 阅读 · 0 评论