1.Linux 内核简介 现在让我们从一个比较高的高度来审视一下 GNU/Linux 操作系统的体系结构。您可以从两个层次上来考虑操作系统,如图 1 所示。 图 1. GNU/Linux 操作系统的基本体系结构 最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。 在Java中,你从来没有传递对象,你传递的仅仅是对象的引用! 传值意味着当参数被传递给一个方法或者函数时,方法或者函数接收到的是原始值的副本。因此,如果方法或者函数修改了参数,受影响的只是副本,原始值保持不变。 在Java中,传递一个引用类型的参数的结果只是传递引用的副本(传值)而非引用自身。 编译时异常: 程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。 运行期异常: 这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。 /* 利用Runtime call操作系统的命令,具体的命令取决于不同的操作系统,注意不要调用Runtime.getRuntime().exec(String)接口,要用Runtime.getRuntime().exec(String[])这个接口,不然复杂命令的执行会有问题。例子如下(拿cpu个数,其他类似):
* 定义命令: * WindowsCmd ="cmd.exe /c echo %NUMBER_OF_PROCESSORS%";//windows的特殊 * SolarisCmd = {"/bin/sh", "-c", "/usr/sbin/psrinfo | wc -l"}; * AIXCmd = {"/bin/sh", "-c", "/usr/sbin/lsdev -Cc processor | wc -l"}; * HPUXCmd = {"/bin/sh", "-c", "echo \"map\" | /usr/sbin/cstm | grep CPU | wc -l "}; * LinuxCmd = {"/bin/sh", "-c", "cat /proc/cpuinfo | grep ^process | wc -l"}; 最近在做一个客户端监控的功能,需要提取用户电脑的CPU编号和网卡的编号,采集用户的登陆数据,据我所知道直接通过Java来调用操作系统的信息是非常困难的事情(我好像没有发现JavaAPI提供了这个功能),那这样的话只能通过JNI访问系统的信息了,不过有个SWT扩展的插件org.eclipse.swt.extension封装了调用DLL的JNI方法,主要是负责底层操作系统的方法,不过可能会对程序的跨平台性有点的影响,目前只能使用于Windows操作系统,使用方法很简单,接下来请看:
今天做项目遇到一个这样的问题,我要把查询出来结果放在数组里,String[] array = new String[?] ,但数组的大小是不可预知的,更不能把length NEW 成常量,怎么办?其实也很简单,我们也经常用的,就是把ArrayList当作动态数组来用就可以了,DEMO:ArrayList<String> array = new ArrayList<String>(); 下面是从网上检索到的具体用法: 对Linux设备驱动开发有了个初步的认识,下面对Linux设备驱动开发环境的搭建做个小结,以方便自己以后查询,同时也能给同道的初学者一点帮助。 刚接触Linux设备驱动时,初学者往往连如何编译驱动程序都不懂,更别说编译进内核或加载测试了。一般都是在网上找个最简单的 helloworld驱动程序,然后严格按照网上所说的步骤编译,结果却得到一大堆见都没见过的错误,更不要说根据错误信息来解决问题了,很多人到这里就 不知道如何往下进行了。十几天前我也卡在这里很长时间,现在知道所以然了就记下来,些许对一些同道者有帮助。 在Linux下文本编辑器写个C程序(和Window一样,应该会吧),假设保存在了桌面上。 开个终端,由于是超高速教程,所以接下来自己看: cd Desktop // 一些中文版的Linux可能这里是中文:桌面 gcc program.c ./a.out 如果不想生成的可执行文件名为a.out,那么可以: Java中数据类型分为两种,一种是基本数据类型,另一种是对象引用类型。所以默认值也分为基本数据类型及对象引用的默认值。另外数组的默认值则是依据是基本数据类型数组还是对象引用类型数组了。 Java中基本数据类型默认值为: 在Linux上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现,只不过后者是针对文件的,即将指定文件从一种编码转换为另一种编码。 一、利用iconv函数族进行编码转换 iconv函数族的头文件是iconv.h,使用前需包含之。 #include <iconv.h> iconv函数族有三个函数,原型如下: Java 浏览器JEditorPane的使用 import java.awt.*; 此系列是为那些读过TC++PL或者具有类似水平的同学准备的,作为系列的第一篇以及有趣的热身,我们来看一个链接问题:
D1.cpp #include <stdio.h> struct X { X(int); X(int, int); }; X::X(int = 0, int = 0) { printf("1\n"); } 对于刚刚接触编程的人来说,Vim 和 Emacs 需要一段时间的学习才能上手,一款 VS 风格的可视化 IDE 还是有必要的。在这里我要介绍的就是这样一款基于 wxWidgets 的跨平台 C/C++ IDE -- CodeLite。 个人比较喜欢 IDE 的补全,就先介绍下曾经使用过的一些 IDE 的补全: OmniCppComplete,Vim 的补全插件,需要 Ctags,对于 Boost 这样大的库,有时一旦我按下快捷键令其补全时,会对 include/boost 文件夹进行扫描,非常慢(我的配置中没有 path 内容,有谁指点我为什么?),有些补全结果集中很多内容不符合上下文。 1. Linux内核ipv4网络部分分层结构: BSD socket层: 这一部分处理BSD socket相关操作,每个socket在内核中以struct socket结构体现。这一部分的文件 主要有:/net/socket.c /net/protocols.c etc 还需要保留些额外的参数,于是就有了struct sock结构。文件主要有:/net/ipv4/protocol.c /net/ipv4/af_inet.c /net/core/sock.c etc Java常用类型定义、转换及比较主要有以下三个方面:
(一) Integer类型 1). 定义 Integer a=new Integer(int value); Integer a=new Integer(String value); 2). 转换 i. 定义中就可以将int型和String型的转换为Integer型 ii. String类型转换为Integer型 Integer.valueOf(""); 这些类文件中,都有可能含有中文字符串,并且我们常用前三类JAVA程序和用户直接交互,用于输出和输入字符,如:我们在JSP和Servlet中得到客户端送来的字符,这些字符也包括中文字符。无论这些JAVA类的作用如何,这些JAVA程序的生命周期都是这样的: *编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以.java扩展名保存在操作系统中,例如我们在中文win2k中用记事本编辑一个java源程序; 怎样在Ubuntu Linux终端中显示带有颜色的字符串呢?很简单,一些简单的命令就可以实现这点要。 是不是如图1所示的这个呢?不是,这个太简单太简单了。 先睹为快,看看下面的截图: Java 文件传输UDP传输图像文件简单示例 package transportFile; Java小程序输入三个数求最大数代码: import java.io.*; public class Help { // 比较两个数字 面向对象的语言更接近人的思维方式,而且在很大程度上降低了代码的复杂性,同时提高了代码的可读性和可维护性,传统的 C 代码同样可以设计出比较易读,易维护,复杂度较低的优美代码,本文将通过一个实际的例子来说明这一点。 基础知识 结构体 除了提供基本数据类型外,C 语言还提供给用户自己定制数据类型的能力,那就是结构体,在 C 语言中,你可以用结构体来表示任何实体。结构体正是面向对象语言中的类的概念的雏形,比如: Java语言提供了ResourceBundle类来对properties类型的资源文件加以处理。 本文对ResourceBundle类做一个解说。 开始之前,我们先解释一下什么是properties类型的资源文件。 在Java语言中,使用一种以.properties为扩展名的文本文件作为资源文件,该类型的文件的内容格式为类似: #注释语句 1,先自定义一个事件 public class MyEvent extends java.util.EventObject{ 2,再自定义一个监听器 项目中用到了 Timer 每隔一段时间进行一些操作,现在发现有时候莫名其妙地挂在这个计时器上的操作都不做了,用“JConsole”查看其中的线程以后,发现这个定时器线程也不在了(定时器创建的时候带了名字 Timer timer = new Timer("MyTimer"),所以直接能看到),由于日志太多,之前的日志已经找不到了,所以没有办法看是否是有异常发生以及发生在哪里。初步估计,是不是由于 TimerTask 中有异常抛出,如果定时器中没有处理的话,可能就会出问题。所以看了一下 java.util.Timer 的代码:
开源文本编辑器Vim的作者Bram Moolenaar推出了新的编程语言Zimbu,一种不拐弯抹角直截了当的实验性编程语言。Moolenaar表示Zimbu集现有语言的优点于一身,同时避开它们的不足。Zimbu代码清晰易读,使用范围广泛——既能写OS kernel,又能写脚本,还能写大的GUI程序,可以编译和运行在几乎所有系统上。Zimbu代码托管在Google Code上,采用Apache License 2.0许可证。 时常在网上看到,有关Java数据通用查询及封装的技术文章,前些日我在看书时突然想起以前怎么写jdbc查询的,好像当时没理顺,昨天晚上花了点时间,复习了一下写了两种通用数据封装。 文章只是为了复习而写,新手可以看看吧,大牛飘过。。。。 先把一些辅助类贴上来: DBHelp.java获得连接及关闭资源 在用Eclipse开发JAVA之前,必须先配置JAVA的一些环境变量。下面是一些过程: 安装好J2SDK之后,设置环境变量:我的电脑---属性---高级---环境变量; 选择---系统变量(S): 设置JAVA_HOME环境变量: 单击---新建,在变量名中输入:JAVA_HOME package com.loong.mail.crontab; import java.sql.CallableStatement; 定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持,但使用场景的不同,对定时器的实现考虑也不尽相同,本文讨论了在 Linux 环境下,应用层和内核层的定时器的各种实现方法,并分析了各种实现方法的利弊以及适宜的使用环境。 概论 定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持,但使用场景的不同,对定时器的实现考虑也不尽相同,本文讨论了在 Linux 环境下,应用层和内核层的定时器的各种实现方法,并分析了各种实现方法的利弊以及适宜的使用环境。 在Linux中存在两个time,一个是bash的命令,另外一个是程序/usr/bin/time,bash的time命令只能很简单的显示程序执行的时间,而/usr/bin/time程序可以显示很详细的与IO相关的数据,比如从内存中读取了多少数据,从磁盘中读取了多少数据之类的,以及文件系统的页大小。 通过type命令我们可以看到Linux中的两个time Ubuntu/Linux C编译相关初步知识。
C 编程中相关文件后缀 .a 静态库 (archive) .c C源代码(需要编译预处理) .h C源代码头文件 .i C源代码(不需编译预处理) .o 对象文件 .s 汇编语言代码 .so 动态库 单个源文件生成可执行程序 下面是一个简单的“hello, ubuntu”程序的源代码: 最近在Linux下写shell,要用到date。要用date得到当前日期,按照网上的资料,自己输入了可怎么也得不到当前的日期。经过不断的google,终于找到了答案。原因是date中的单引号错误,应该是在“Esc”按键下与“~”在一起的“·”。马上修改,问题解决了。 date的一些用法示例:
/usr/local/mysql-5.1.32/bin/mysql -u root -p111111 -e "use mysql;select host,user,password from user"; exit 0; **************************************** 如果需要导出mysql的记录到文本文件: /usr/local/mysql-5.1.32/bin/mysql -u root -p111111 -e "use mysql;select host,user,password from user into outfile '/home/mysql/aa.txt';" 摘要:1 .打开串口 2.配置串口参数 3. 读写串口内容。
1.打开串口函数open_port()中要实现的函数: (1)open("/dev/ttys0",O_RDWR | O_NOCTTY | O_NDELAY);/*打开串口0*/ (2)fcntl(fd,F_SETFL,0)/*恢复串口为阻塞状态*/ (3)isatty(STDIN_FILENO) /*测试是否为中断设备 非0即是中断设备*/ 2.配置串口参数函数set_opt()中要实现的函数: (1)保存原先有串口配置 tcgetattr(fd,&oldtio); 网上这方面资料很多 但多是旧版本的 。我还没有发现Ubuntu 9.10 下qt 4.5.3 和qt QtEmbeded 4.5.3 安装资料 一条件: 下载以下安装包: Java.io 获取相对路径文件代码 package org.firstgame.test; import java.io.File; public class PathTest { /** 由于Linux还不是一个实时的操作系统,因此如果需要更高精度,或者更精确的定时的话,可能就需要打一些实时的补丁,或者用商用版的实时Linux,.
这里内的定时器最小间隔也就是1个tick. 这里还有一个要注意的,我这里的分析并没有分析内核新的hrt 定时器.这个定时器是Monta Vista加入到内核的一个高精度的定时器的实现. 1. RandomAccessFile 中有 int read() 功能:读取一个字节,返回该字节的int类型 int readInt() 功能:读取4个字节,返回其int类型 write与writeInt的区别同上 本文介绍利用Linux下的C语言Socket函数建立TCP连接,兼容C++。 利用TCP连接,可以进行HTTP、FTP等常见协议的信息传输,是Linux网络编程的重要部分。 需要引用的头文件 #include <sys/socket.h> 最近要好好学习一下Linux驱动,所以想找个运行环境,自己编译内核,然后在其上做实验,所以就想在VirtualBox上进行。 1.首先建立个硬盘镜像: 2. 为磁盘镜像分区 Sun Microsystems 已经为Mac OS X发布了Java Micro Edition Software Development Kit(Java ME SDK)3.0的早期预览版。这就意味着Mac中的开发者现在也可以开发Java移动程序。早期预览版要求配置Java 1.6作为默认的运行环境。 SDK是基于最近Sun发布的NetBeans 6.8 Beta版的开发环境,支持所有的Java ME APIs,同时还支持CLDC(Connected Limited Device Configuration) Hot Spot Virtual Machine。另外,SDK允许开发者在Mac上运行 JavaFX 1.2.1 Mobile Emulator. 经过长时间的学习Linux gcc,发现要理解Linux gcc也是必要的,今天小编给大家搜集了关于块设备的概念以及作用,希望大家看后会有很多收获。 1、Linux gcc包含的c/c++编译器 gcc、cc、c++、g++: gcc和cc是一样的,c++和g++是一样的,一般c程序就用gcc编译,c++程序就用g++编译 2、Linux gcc的基本用法 groovy很适合在服务器端写实现简单任务的脚本。参数可以通过命令一次传进去,不过重复查询时很不方便,尤其是groovy要加载JVM虚拟机,通过命令传参数给人感觉脚本很慢。 groovy可以使用jdk6中新增的java.io.Console实现控制台交互的功能,以下是一个简单的示例: 1、选择要转换的java文件,生成class 剩下的就只有调用了wsdl2java 我原来的系统是CICS的,对后台封装了一层,现在用webservice再封装一层,前台页面,控制,数据传输,数据处理统统都可以分开了,爽 在Ubuntu下编译和执行C程序笔记摘抄。 首先编译C文件,进入到文件的当前目录,比如在Desktop目录,$ cd /home/wen/Desktop 然后编译C程序,$ gcc OBJECT.c -o NAME 本例示范Linux信号量的基本用法。该范例使用了两个线程分别对一个公用队列进行入队和出队操作,并用信号量进行控制,当队列空时出队操作可以被阻塞,当队列满时入队操作可以被阻塞。 主要用到的信号量函数有: sem_init:初始化信号量sem_t,初始化的时候可以指定信号量的初始值,以及是否可以在多进程间共享。 sem_wait:一直阻塞等待直到信号量>0。 sem_timedwait:阻塞等待若干时间直到信号量>0。 sem_post:使信号量加1。 1. 从vmlinux获取具体的代码行 然后就可以按照具体的方法去操作,可以定位到具体的C 代码行。 很多新手面临的困难和困惑都出现在编译和打包软件方面,Ubuntu的apt-get方式的确很易用,但是也屏蔽了学习的空间,对于那些希望好好学习Linux的而又感到困惑的人,通过以下三个程序的帮助,应该可以有效的减轻你的负担: 第一个,checkinstall 安装命令:sudo apt-get install checkinstall 程序功能:能跟踪由“make install”或类似命令安装的所有文件,并为这些文件创建Slackware、RPM或者Debian安装包,然后把它添加到已安装软件包数据库中,以便能简便的卸载或发布安装包。 |
内容分类
|