EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2007/7/3 20:46:35

1

关于投票

嵌入式Linux用Qt Designer快速开发

RAD(快速应用程序开发)是一种高效的软件开发形式,可以让用户在极短的时间里创建一个图形化的用户界面。通常情况下,在一张空白的表单上,开发人员可以通过拖拉或点击的方式,在窗口的适当位置上添加一些输入框和按钮等窗口组件。这时,RAD工具会自动编写和维护代码。而用户所要做的只是确定当点击按钮或选择选单选项时将要发生什么事件。

在Linux下,一个非常流行的RAD工具就是Qt Designer。它是嵌入式公司Trolltech的Qt软件包的一个组成部分。如果用户使用的是KDE桌面,那么Qt已经自动安装上了,Qt Designer也很有可能已经被安装好。如果用户的系统没有安装,那么针对不同的版本,可以很方便地找到KDE Development Tools,并安装之。以Red Hat 9.0为例,用户可以从主选单→系统设置→添加/删除应用程序中选择KDE软件开发,即可完成Qt Designer的安装(如图1所示)。


图1 安装Qt Designer

创建

为了快速地向大家展示一下Qt Designer功能,先创建一个简单的摄氏温度和华氏温度的转换程序。本文里将设计一个简单的GUI,并且添加一些简单的代码来实现温度的转换。因为是为了展示一下快速的开发过程,而不是一个严谨的软件项目的开发,所以这里不会进行任何的错误检查,也不进行输入检验(也就是检查用户的输入是否为合法的温度形式)、缓冲溢出检查等在日常软件开发中一定要做的步骤。

如果用户使用的是KDE,那么选单上应该已经有Qt Designer的图标。不同的发行版,图标的位置会有所不同。如果用户的发行版没有Qt Designer图标,那么可以在命令行模式下输入“designer”命令来启动该开发工具。在Red Hat 9.0中,可以通过点击主选单→编程→更多编程工具→Qt Designer来启动(如图2)。


图2 启动Qt Designer

Qt Designer首先呈现给用户的是一个New/Open对话框(如图3所示)。因为这里要创建一个C++程序,所以在此选择C++ Project,点击“OK”继续。


图3 New/Open对话框

选择一个想要保存文件的位置,并且给出一个文件名,在此使用的文件名是cfconv。注意这里文件名的扩展名一定要是.pro。点击“Save”后,返回到了Project Settings对话框(见图4)。


图4 保存文件


图5 Qt Designer主窗口

现在就已经在Qt Designer主窗口上了(见图5),确保Property Editor可见。如果它是不可见的,用户可以通过Windows→Views→Property Editor/Signal Handlers选单选项来使其可见(缺省情况下是可见的)。


图6 创建一个新的表单


图7 更改表单的属性

通过选择File→New选单,然后选择Dialog来创建一个新的对话框。这时Qt Designer会创建一个新的空白表单(见图6),用户可以在其上放置输入框和按钮。

打开Property Editor(见图7),把name的值改为“cfconvMainForm”,把caption的值改为“Celsius to Fahrenheit Converter”。

这里表单的name是被应用程序使用的内部名字,在用户编写代码时,有时需要使用的就是这个名字。Caption指的是要在标题栏上显示的名字。

从左边的工具箱中选择Common Widgets,并且双击“TextLabel”。在表单的左上角放置一个标签,在这个标签位置下方再放置一个同样的标签。选中上面的标签,并且将其text值改为“Celsius”,相应地把第二个标签的text值也改为“Fahrenheit”。在这两个标签的后面加上两个对应的输入框,用于输入需要转换的温度和输出转换后的温度。从Common Widgets中双击选择LineEdit,然后在两个标签后创建两个LineEdit。

把两个LineEdit框的name值分别改为“celsiusLineEdit”和“fahrenheitLineEdit”,再把fahrenheitLineEdit文本框的readOnly属性改为True。

从Common Widgets上选择PushButton,并且创建两个按钮,分别将其name和text属性改为quitPushButton和Quit、convertPushButton和Convert。这时表单看起来就如图8所示。


图8 基本完成的GUI

现在按“Ctrl+S”或从选单中选择File→Save,接下来要求输入文件名。缺省情况下,使用的是表单的name值,扩展名使用的是.ui。用户可以接受这个名字,然后点击“Save”。

如果想看一看效果,用户可以按“Ctrl+T”或从选单中选择Preview→Preview Form来预览应用程序。但是现在按钮还不能做任何事情,所以下一步要做的事情就是让按钮和某一特定的动作相关联。当点击“Quit”按钮时,要求应用程序会被关闭;而当点击“Convert”按钮时,要求输入的温度由摄氏温度转换为华氏温度。

在“Quit”按钮上点击右键,选择Connections,然后点击“New”。从Sender列表中选择quitPushButton,从Signal列表中选择clicked(),从Receiver列表中选择cfconvMainFrom,从Slot列表中选择close()。用户可以参见图9所示。


图9 为Quit按钮创建关联

现在,当用户点击“Quit”按钮时,会向表单发送一个鼠标点击的信号,这将使这个表单关闭(因为这个表单是主表单,所以它关闭时应用程序也就同时关闭了)。要进行测试,可以选择Preview→Preview Form。这时点击“Quit”按钮,预览窗口就会被关闭。

下面为“Convert”按钮创建连接。在“Convert”按钮上点击右键,然后选择Connections。这时用户会发现这是一个全局连接窗口,而不是某一窗口部件的连接。点击“New”来创建一个新的连接。从Sender列表中选择convertPushbButton,从Signal列表中选择clicked(),从Receiver列表中选择cfconvMainFrom。本想将该按钮与fahrenheitLineEdit窗口部件相关联,但列表中却没有一个可以满足这项要求的栏目。因此需要创建一个新的栏目来完成这个连接。


图10 创建新的栏


图11 完成连接创建

点击“Edit Slots”和“New Function”(见图10),把函数名改为convert(),其它的值可以保持不变,点击“OK”来关闭窗口。

要完成这个连接,从Slot列表中选择convert()(见图11)。

现在来完成应用程序的代码部分:创建convert()函数。在Project Overview窗口点击“cfconvmainform.ui.h”来启动Code Editor。此时convert()函数实际上已经存在了,只不过是空的罢了。输入下面的C++代码来完成函数:

void cfconvMainForm::convert() {
	/* Declare some variables */
	double celsius_input, result = 0;
    
	/* Retrieve Celsius input */
	celsius_input = celsiusLineEdit->text().toDouble();
    
	/* Convert to Fahrenheit */
	result = (celsius_input *  (9.0/5.0)) + 32.0;
    
	/* Enter result and clear Celsius input box */
	fahrenheitLineEdit->setText(QString::number(result, 'f', 1));
	celsiusLineEdit->clear();
}

现在就已经基本完成这个应用程序了。不过在编译和运行此应用程序之前,还要创建一个main.cpp文件。方法是选择File→New→C++Main-File(main.cpp),只需接受缺省的配置即可。main.cpp会自动在Code Editor中打开。因为这里无需改变main.cpp中的任何东西,所以直接将Code Editor窗口关闭,并且保存main.cpp。这时也同时关闭cfconfMainForm.ui.h Code Editor窗口。

编译

到此为止,在Qt Designer中的工作已经完成了。保存整个项目,下面来编译和运行这个程序。在编译程序之前,要首先生成它的Makefile文件。打开一个终端,然后切换至保存有项目的位置,使用以下命令来生成Makefile文件:
#qmake -o Makefile cfconv.pro

现在,就可以运行make来编译程序了,根据系统的性能,这个步骤需要花费一点时间。当编译工作完成后,输入./cfconv来运行程序。如果一切正常,用户应该已经看到程序了。(T111)

系统分类: 嵌入式  |  用户分类: linux  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(1165) | 回复(0)

发表于 2007/7/2 23:44:09

2

关于投票

Linux基本命令



1.Linux进入与退出系统
进入Linux系统:
必须要输入用户的账号,在系统安装过程中可以创建以下两种帐号:
   1.root--超级用户帐号(系统管理员),使用这个帐号可以在系统中做任何事情。
   2.普通用户--这个帐号供普通用户使用,可以进行有限的操作。
   一般的Linux使用者均为普通用户,而系统管理员一般使用超级用户帐号完成一些系统管理的工作。如果只需要完成一些由普通帐号就能完成的任务,建议不要使用超级用户帐号,以免无意中破坏系统。影响系统的正常运行。
   用户登录分两步:第一步,输入用户的登录名,系统根据该登录名识别用户;第二步,输入用户的口令,该口令是用户自己设置的一个字符串,对其他用户是保密的,是在登录时系统用来辨别真假用户的关键字。
   当用户正确地输入用户名和口令后,就能合法地进入系统。屏幕显示:
[root@loclhost /root] #

这时就可以对系统做各种操作了。注意超级用户的提示符是“#”,其他用户的提示符是“$”。

修改口令
   为了更好的保护用户帐号的安全,Linux允许用户随时修改自己的口令,修改口令的命令是passwd,它将提示用户输入旧口令和新口令,之后还要求用户再次确认新口令,以避免用户无意中按错键。如果用户忘记了口令,可以向系统管理员申请为自己重新设置一个。 字串7

虚拟控制台
   Linux是一个真正的多用户操作系统,它可以同时接受多个用户登录。Linux还允许一个用户进行多次登录,这是因为Linux和UNIX一样,提供了虚拟控制台的访问方式,允许用户在同一时间从控制台进行多次登录。虚拟控制台的选择可以通过按下Alt键和一个功能键来实现,通常使用F1-F6例如,用户登录后,按一下Alt-F2键,用户又可以看到"login:"提示符,说明用户看到了第二个虚拟控制台。然后只需按Alt-F1键,就可以回到第一个虚拟控制台。 一个新安装的Linux系统默认允许用户使用Alt-F1到Alt-F6键来访问前六个虚拟控制台。虚拟控制台可使用户同时在多个控制台上工作,真正体现Linux系统多用户的特性。用户可以在某一虚拟控制台上进行的工作尚未结束时,切换到另一虚拟控制台开始另一项工作。

退出系统
   不论是超级用户,还是普通用户,需要退出系统时,在shell提示符下,键入exit命令即可。

Linux文件的复制、删除和移动命令

cp命令
该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大。

语法: cp [选项] 源文件或目录 目标文件或目录 字串6

说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。

该命令的各选项含义如下:

- a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。

- d 拷贝时保留链接。

- f 删除已经存在的目标文件而不提示。

- i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。

- p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。

- r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。

- l 不作拷贝,只是链接文件。

   需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。

mv命令

用户可以使用mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令如同MSDOS下的ren和move的组合。

字串5


语法:mv [选项] 源文件或目录 目标文件或目录

说明:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。

命令中各选项的含义为:

- I 交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答y或n,这样可以避免误覆盖文件。

- f 禁止交互操作。在mv操作要覆盖某已有的目标文件时不给任何指示,指定此选项后,i选项将不再起作用。

如果所给目标文件(不是目录)已存在,此时该文件的内容将被新文件覆盖。为防止用户用mv命令破坏另一个文件,使用mv命令移动文件时,最好使用i选项。



rm命令
字串4
用户可以用rm命令删除不需要的文件。该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是断开了链接,原文件保持不变。

rm命令的一般形式为:

rm [选项] 文件…

如果没有使用- r选项,则rm不会删除目录。

该命令的各选项含义如下:

- f 忽略不存在的文件,从不给出提示。

- r 指示rm将参数中列出的全部目录和子目录均递归地删除。

- i 进行交互式删除。

使用rm命令要小心。因为一旦文件被删除,它是不能被恢复的。了防止这种情况的发生,可以使用i选项来逐个确认要删除的文件。如果用户输入y,文件将被删除。如果输入任何其他东西,文件则不会删除。

Linux目录的创建与删除命令
mkdir命令

功能:创建一个目录(类似MSDOS下的md命令)。

语法:mkdir [选项] dir-name

说明:该命令创建由dir-name命名的目录。要求创建目录的用户在当前目录中(dir-name的父目录中)具有写权限,并且dirname不能是当前目录中已有的目录或 文件名称。
字串8


命令中各选项的含义为:

- m 对新建目录设置存取权限。也可以用chmod命令设置。

- p 可以是一个路径名称。此时若路径中的某些目录尚不存在, 加上此选项后, 系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。



rmdir 命令

功能:删除空目录。

语法:rmdir [选项] dir-name

说明:dir-name表示目录名。该命令从一个目录中删除一个或多个子目录项。需要 特别注意的是,一个目录被删除之前必须是空的。rm - r dir命令可代替 rmdir,但是有危险性。删除某目录时也必须具有对父目录的写权限。

命令中各选项的含义为:

- p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应 的信息。

cd 命令

功能:改变工作目录。

语法:cd [directory]

说明:该命令将当前目录改变至directory所指定的目录。若没有指定directory, 则回到用户的主目录。为了改变到指定目录,用户必须拥有对指定目录的执行和读 权限。

系统分类: 嵌入式  |  用户分类: linux  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(573) | 回复(0)

发表于 2007/6/13 10:36:24

0

关于投票

VMware5.0中Redhat9.0与PC文件夹共享

VMware5.0中Redhat9.0与PC文件夹共享

        在VMware中安装Redhat9.0后成功后,安装VMware工具,其中VMware工具中有两个安装文件,分别把它们拷贝到home/user下面,然后解压后安装。
        选择虚拟机,点击edit virtualmachine setting,选择option项,选择shared folder,进行add操作
        完毕后,重启VMware,cd /mnt/
       #ls
         发现mnt文件夹下面多了一个ghfs的文件夹,在ghfs的文件夹下,有一个刚才设置的共享文件夹,这时共享设置成功,你可以在VMware中RH9与windows实现文件共享了。

系统分类: 嵌入式  |  用户分类: linux  |  标签: 无标签  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(940) | 回复(1)

发表于 2007/6/10 21:47:26

0

关于投票

linux 开发入门

linux 开发入门(华恒)

pdf

系统分类: ARM  |  用户分类: linux  |  标签: 无标签  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(980) | 回复(0)

发表于 2007/6/4 16:39:37

0

关于投票

Linux常用命令介绍

[转帖]Linux常用命令介绍

谈到Linux命令很多人都望而生畏,因为Linux的命令太多了,而且每个命令都有很多选项,但是Linux命令又是Linux系统里最重要的工具,学习Linux命令是学习Linux必不可少的一个环节,也是Linux入门基础。所以在介绍Linux的其它方面之前,我们先介绍一下Linux的常用命令,希望我的这点简单介绍对你了解Linux命令有所帮助。

在介绍所有的命令之前,先介绍一下Linux的在线帮助man。在Linux下,当你要查找一个命令的用法的,你可以通过 man 命令名来源得命令的详细说明。因为每个Linux都有一份man文档,所以介绍命令的时候我们只是简直介绍一下命令的学用选项。如果想查看命令的详细说明,请自己看man。下面是man各小节的内容:
   1   用户命令。
   2   系统调用。
   3   库函数。
   4   特殊文件(设备和网络接口)。
   5   文件格式。
   6   游戏和演示。
   7   系统环境、表格和宏。
   8   系统管理和相关命令。

  1. apropos    依据所给关键字查找相关的命令和系统调用
    格式:apropos keyword

    例:查找与ftp相关的命令和系统调用

    $apropos ftp

    注:类似的命令有man -k。man -k 其实就是执行apropos

  2. at    在某一特定时间执行指定的命令
    格式:at [-V][-q 队列][-f 文件][-m] time 

    选项说明:

    -V     显示标准的错误输出。
    -f     可将作业存在一个文件中,用这个选项指定文件。例如一个shell文件。
    -q     指定队列名称,默认为c。
    -m     执行后给用户发邮件。

    time 指定开始执行的时间。时间格式为: HH:MM,日期格式:MM/DD/YYMM.DD.YY或MMDDYY。 下面的例子演示了在2004年3月11日21点34分执行一个at命令。

    $at 21:34 03/11/04

    执行这条命令后会得到一条warning:
    commands will be executed using (in order) a)$SHELL b) login shell c)/bin/sh。然后就出现“at>”的提示符。这时你就可以输入你要执行的命令了,结束后按Ctrl+d。你就可以去喝茶了,到时间后系统会自动执行它。

    相关配置文件:

    /etc/at.allow 如果这个文件存在,仅允许这个文件里列出的用户使用at。

    /etc/at.deny 如果这个文件存在,该文件列出的用户都不能使用at服务。当 这个文件为空时,任何用户都可以使用at,这是默认配置。

    当运行at命令时,先检查/etc/at.allow文件是否存在,如果不存在,再检查 /etc/at.deny文件是否存在。不管这两个文件是不是存在,root用户都可以执行at命令。

    相关命令:

    atq:列出用户待执行的任务,除了root用户的外,每个用户的任务都将被列出。

    atrm:通过任务号删除at任务。

    batch:当系统负载允许的时候执行命令。比如当负载低于0.8或者一个指定的值时,指行atrun。

  3. cat    查看文件内容,从键盘读取数据,合并文件等
    格式:cat [-b][-A][-E][-T][-n][-s][-v] 文件名

    选项说明:

    -b     不显示文件中的空行。
    -A     相当于 -v -E -T (-vET)。
    -E     在文件的每一行行尾加上“$”字符。
    -T     将文件中的Tab键用字符“^I”来显示。
    -n     在文件的每行前面显示行号。
    -s     将连续的多个空行用一个空行来显示。
    -v     显示除Tab和Enter之外的所有字符。

    下面的命令演示了如何显示file文件中的行号

    $cat -n file
    
  4. chmod    修改文件权限
    格式:chmod 选项 文件或目录名

    选项说明:

    u     文件所有者
    g     文件所属组
    o     其它用户
    +     增加权限
    -     取消权限
    =     赋给权限
    a     所有用户
    r     读权限
    w     写权限
    x     执行权限

    下面的命令演示了如何使所有用户都可以读写file文件

    $chmod a+rw file
  5. chown    改变文件所有者
    格式:chown [-R][-c][用户名][组名] 文件或目录名

    选项说明:

    -c     文件属主改变时显示说明。
    -R/r    改变目录下的文件及其子目录下所有文件的属主。

    下面的命令演示了如何改变 dir 目录下的文件及其子目录下的文件的属主为bugboy

    $chown -R bugboy dir
    

  6. cp    复制文件
    格式:cp 选项 源文件名 目标文件名

    选项说明:

    -R     复制整个目录。
    -f     删除己存在的目标文件。
    -i     使用-f遇到删除文件时给出提示。

    下面的命令演示了如何把 file 文件复制到当前用户的根目录下

    $cp  file  ~/
    
  7. crontab     制定计划任务

    crontab通过cron服务使用户能够在指定的时间执行某些程序,它通过cron复制,创建列出,删除crontab文件来管理用户权限和计划。

    命令格式:crontab [-u username] [-l] [-e] [-r]

    选项说明:

    -e     编辑当前用户的crontab文件,或者当一个crontab文件不存在时,创建一个crontab 文件。编辑并保存后文件被当前用户的crontab安装。
    -l     列出当前crontab文件内容。
    -r     删除当前用户的crontab文件。
    -u username     指定用户名。

    crontab文件格式:

    crontab文件有六个域,每个域之间用空格或者Tab键分开,前五个域都是整数或者*,格式如下(括号里面是取值范围):

        分钟(0-59)	小时(0-23)  日(1-31)  月(1-12)  星期(0-6)  要执行的命令

    其中星期取值0指星期日,其它取值递推。前面五个域,每个域都可以用*表示所有合法的值,或者用一个列表列出合法的值,各值之间用“,”隔开,也可以用“-”表示一个范围。下面的命令演示每个星期,星期日到星期四晚上23:30分关机。

        30  23  *  *  0-4  halt -p
    

    下面的例子示出每星期星期一到星期五3:15分清除用户目录下的core文件

        15  3   *  * 1-5  find $HOME -name core 2>/dev/null |xargs rm -f

    下面是一个crontab文件的例子,请用crontab -e 命令编辑。

    SHELL=/bin/bash
    PATH=/usr/bin:/bin:/usr/sbin:/sbin
    MAILTO=bugboy
    HOME=/home/bugboy
    30 23 * * 0-4 halt -p
    

    前面四行定义环境变量,最后一行是执行的命令,你可以定义要执行多个命令。如果你的crontab文件已经正确编辑,保存退出后会得到一条"crontab:installing new crontab" 的信息。

    相关文件:

    /etc/cron.d/cron.allow     如果这个文件存在,文件中包含的用户名可以使用crontab。

    /etc/cron.d/cron.deny     如果这个文件存在,文件中包含的用户不能使用crontab。

    你可以自己编辑这两个文件,注意每个用户名占一行。

  8. df    查看磁盘剩余空间
    格式:df [-t][-x][-k][-p][-a][-m][filename]

    选项说明:

    -t     只输出类型列在fstype中的文件系统。
    -x     只输出类型没有列在fstype中的文件系统。
    -k     显示空间以K为单位。
    -m     显示空间以M为单位。
    -a     将空间为0的文件系统也输出。
    filename     指定要查看的文件的大小。
  9. fdisk/sfdisk   查看硬盘分区信息
    格式:fdisk -l [-u] [device ...]
          fdisk -s partition
    

    选项说明:

    -u   列出分区表的时候以扇区的大小代替柱面大小。
    -l   列出给定设备的分区表,如果没有给定设备,则列出/proc/partions中设备的分区表。
    -s partition   给出partition分区的大小(以块为单位)。
  10. file    识别文件类型
    格式:file 文件名
  11. find    查找文件
    格式:find [路径][匹配表达示]

    其中匹配表达示有几种类型:

    -name filename     查找指定名称的文件。
    -user username     查找指定用户名的文件。
    -group grpname     查找指定级名的文件。
    -print     显示查找的结果。
    -size n     查找大小为n块的文件,一块等于512字节。符号“+n”表示查找大小大于n块的文件;符号“nc”表示查找大小为n个字符的文件,同样的也有符号“+nc”。
    -inum n     查找索引结点号(i-node)为n的文件。
    -atime n    查找n天前被访问的文件。“+n”表示超过n天前被访问的文件;“-n”表示不超过n天前被访问的文件。
    -mtime n    类似于atime,但是检查的是文件内容被修改的时间。
    -ctime n   类似于atime,但检查的是文件索引结点被改变的时间。
    -perm mode     查找与给定权限匹配的文件,必须以八进制的形式给出访问权限。
    -newer file     查找比指定文件新的文件,即最后修改时间离现在较近。
    -exec command    对匹配文件执行command命令,command后用了个大括号包括文件名。command必须以反斜杠和一个分号结尾。
    -ok command     执行command的时候请求用户确认。其它与-exec相同。
    例:查找当前目录下所有以.bak结尾的文件,并删除它们
     $find . -name "*.bak" -exec rm {} \;

    注:这里 *.bak 必须要用单引号或者双引号引起来,或者可以写成\*.bak。

  12. head    输出文件内容前面的部分
    格式:head [选项][文件]……

    选项说明:

    -n     输出文件的前n行,默认输出10行。
    -c     指定输出文件的大小,单位为byte。
  13. kill    终止进程
    格式:kill [-s|p][-a] PID

    选项说明:

    -s     指明发送给进程的信号。例如-9(强行终止),默认发送TERM信号。
    -p     显示进程的ID,不发送信号。
    -a     终止所有进程。
    0     给所有在当前进程组中的进程发送信号。
    -1     给所有进程号大于1的进程发送信号。
  14. less    交互式显示文件内容
    格式:less 文件名

    说明:

    可以通过C-v(Page-Down)、C-b(Page-Up)向后向前翻页,C-p、C-n向后向前移一行。这个命令和后面要说的more命令都可以按q键退出。

  15. ln    在文件之间建立链接
    格式:ln [-b][-d][-F][-f][-i][-n][-s][-v] 源文件 目录文件或目录 

    选项说明:

    -b     为删除的文件建立备份。
    -d     允许root用户建立硬链接。
    -F     与b相同。
    -f     强行删除目标文件。
    -i     在删除文件时给出提示。
    -n     当目标文件是目录的符号链接时,替代该符号链接。
    -s     用符号链接代替硬链接(建立符号链接)。
    -v     输出被链接文件的文件名。
  16. ls    用于浏览目录,查看当前目录下的文件和文件名
    格式:ls [选项]

    选项说明:

    -a     显示所有文件(包括隐藏文件)。
    -l     显示文件的详细信息。
    -k     显示文件大小,以K为单位。
    -color     显示文件时用不同颜色加以区别文件类型。
    -d     将根目录作为文件显示。
  17. more    一页一页地显示文件内容
    格式:more [选项] 文件名

    选项说明:

    +n     由第n行开始显示
    +/str     由含有str字符串的地方开始显示。
  18. mount    加载文件系统
    格式:mount 磁盘或分区的设备文件 载入点 选项

    选项说明:

    -t     文件系统类型(fat32为vfat)
    -o     选项 常用的选项有codepage,iocharset(对于中文codepage=936,iocharset=gb2312)
    -loop     挂载ISO文件时用

    举个例子,挂载/dev/hda5到/mnt/wind目录下并且目录支持中文,命令如下:

    #mount -t vfat /dev/hda5 /mnt/wind -o codepage="936",iocharset=gb2312
    
  19. mv    重命名文件或移动文件
    格式:mv [-b][-f][-i][-u][-v] 源文件 目标文件或文件夹

    选项说明:

    -b     为源文件作备份
    -f     文件重命名时强制覆盖己有文件。
    -i     覆盖文件时给出提示。
    -u     目标文件比源文件新时不覆盖。
    -v     移动文件时给出相应的提示。
  20. oggenc   压缩音乐文件为.ogg格式
    格式:oggenc  文件名

    把*.wav文件压缩为*.ogg格式

    $oggenc *.wav

    同等条件下,ogg会比mp3获得较好的音乐效果

  21. ps    查看进程状态
    格式:ps [选项]

    选项说明:

    -e/A    列出所有进程。
    -u     选择有效的用户ID。
    -p     选择指定终端下的进程。
    -C     选择指定的文件名。
    -f     列出所有详细信息。
    -l     按长格式显示。
    -j     按job格式显示。
    -x     选择没有控制终端的进程。
  22. quota    显示磁盘的使用情况,一般用户可以查看自己使用磁盘的权限
    格式:quota [-g][-u][-v][-p] 用户名或组名

    选项说明:

    -g     显示用户所在组使用磁盘的权限。
    -u     显示用户自己使用磁盘的权限。
    -p     使显示信息简洁化。
  23. rename   批量修改文件名
    格式:rename from to file...

    选项说明:

    from   源字符。
    to    目标字符。
    file   要改名的文件

    下面的命令演示了把所有文件的后辍由rm改为rmvb

    $rename .rm .rmvb *

    下面的命令把所有文件名中的大写改为小写

    $rename 'tr/A-Z/a-z/' *
  24. rpm    redhat软件包管理工具
    格式:rpm [选项] 文件名|软件包名

    选项说明:

    --version     获得rpm程序的版本信息。
    -vv     获得详细的帮助信息。
    -v     打印冗长的信息,常与-i选项合用,获得安装进度。
    -i     安装软件包。
    -U     升级软件包,如果没有旧版的软件包就安装它。
    -F     更新软件包,当有旧的软件包的时候。
    --force     相当于--replacepkgs,--repalcefiles,--oldpackage。
    --nodigest     不验证软件包的独立性。
    --nosignature     不验证软件包或者页眉签名。
    --nodeps     不检查软件包的安装路径。
    --oldpackage     用新软件包替换旧软件包。
    --prefix PATH     指定软件包的安装路径。
    --relocate  OLDPATH="NEWPATH"     把原来安装在“OLDPATH”下的软件包重新安装到“NEWPATH”去。
    --replacefiles     安装软件包,即使它们替换掉其它的文件。
    --replacepkgs     替换掉已经安装的同名软件包。
    -e|--erase     软件包名 删除软件包。
    --allmatches     删除软件包的所有版本。
    -q     查询已经安装的软件包。
    -a     选择所有软件包。
    -h     当解开软件包时,打印50个标记,通常与iv选项一起用。

    特别说明:

    在删除软件包时,软件包的名称不等于安装时的文件名。通常一个rpm包由软件包名称+版本号+发行号+发行平台+后辍构成。比如有个文件名为bugboy-1.01-1.i386.rpm,那么它的软件包名称是bugboy,版本号是1.0.1,发行号是1,发行平台是intel 386

  25. rm    删除文件或者目录
    格式:rm [-d][-i][-r][-v][-f] 文件名或目录名

    选项说明:

    -d     使用这个选项后,rm大体想当于unlink。
    -i     删除每个文件时给用户提示。
    -r     删除整个目录,包括文件和子目录。
    -v     删除每个文件时给出提示。
    -f     强制删除,并且不给提示。
  26. sox    转换音频文件
    格式:sox  [选项] from [选项] to

    选项说明:

    -t   文件格式。
    -r   采样频率。

    例:把file1.wav转换成file1.au文件

    $sox  file1.wav  file1.au
    

    把file1.wav 转换成file1.voc文件,并把采样频率由10000 Hz降为5000 Hz

    $sox  -r 10000 file1.wav -r 5000 file1.voc

    减小文件噪音,让文件通过低通滤波器

    $sox file1.wav file1.voc lowp 2200

    注:对于一些没有许可授权的文件格式,sox不支持

  27. su    改变当前用户的ID。
  28. tail    输出文件内容后面的部分
    格式:tail [选项] 文件名

    选项说明:

    -n     只显示后面的n行。
    -f     动太显示,常用于跟踪消息文件。
  29. tar    解压或压缩文件
    格式:tar [选项] 文件[文件1……] 目录[目录1……]

    选项说明:

    -A     将一个tar文件追加到一个存档中。
    -c     生成一个新的存档文件。
    --delete     从存档中删除。
    -r     将文件添加到一个存档的末尾。
    -l     列出一个存档的内容。
    -u     仅将些存档中内容较新的文件添加到存档中。
    -x     从存档中解压缩文件。
    -v     详细地列出处理过的文件的信息。
    -z     用gzip来处理文件。
    --remove-files     将文件解压之后就删除它们。
    -Z     用compress来处理文件。

    注意:选项中必须包含有A c d r t u x中的一个或多个。

  30. top     查看CPU的使用率,修改进程运行优先级
    格式:top 选项

    选项说明:

    -d delay    指定刷新的秒数。
    -p pid     查看指定pid的CPU使用率。

    默认情况下进程按CPU使用率排序,可按PID(N),时限(A),常驻内存使用率(M),时间(T),和CPU使用率(P)来排序。

  31. type     查看一个命令所在路径
    格式:type command   

    例:查找ls命令所在路径

    $type ls
  32. umount    卸载系统
    格式:umount 磁盘或分区的设备文件(也可以是载入点)
  33. useradd     添加用户或更新新创建用户的默认信息
     格式:useradd  选项 

    选项说明:

    -c comment    描述新用户帐号,通常为用户全名。
    -d home_dir    设置用户主目录,默认值为用户的登录名,并放在/home目录下。
    -D     创建新帐号后保存为新帐号设置的默认信息。
    -e expire_date     用MM/DD/YYYY格式设置帐号过期日期。
    -f inactivity    设置口令失效时间,该值为0使口令失效后帐号立即失效,为-1使该选项失效。
    -g    设置基本组。
    -k skel_dir    设置框架目录,该目录包含用户的初始配置文件,创建用户时该目录下的文件都被复制到用户主目录下。
    -m    自动创建用户主目录,并把框架目录(默认为/etc/skel)下的文件复制到用户主目录下。
    -M    不创建用户主目录。
    -r    允许保留的系统帐号使用用户ID创建一个新帐号。
    -s shell   指定用户的登录shell。
    -u user_id    设置用户ID。
    例:#useradd -m -g users -G Wheel,student  -s /bin/sh -c "Yan Dingcheng" bugboy

    例用usermod修改用户帐号时各选项与useradd命令相似。

  34. userdel    删除用户帐号
    格式:userdel username

    选项说明:

    -r     删除帐号时连同帐号主目录一起删除。

    注意:删除用户帐号时非用户主目录下的用户文件并不会被删除,管理员必须以find命令搜索删除这些文件。下面这条命令删除bugboy用户的所有文件:

    #find / -user bugboy -exec rm {} \;
  35. whatis     查看可以使用的man page和命令的基本功能介绍
    例:$whatis top
  36. whereis    定位可执行文件、源代码文件、帮助文件在文件系统中的位置
    格式:whereis [-bmsu] [BMS 目录名 -f ] 文件名

    选项说明:

    -b     定位可执行文件。
    -m     定位帮助文件。
    -s     定位源代码文件。
    -u     搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
    -B     指定搜索可执行文件的路径。
    -M     指定搜索帮助文件的路径。
    -S     指定搜索源代码文件的路径。
  37. w    查看登录用户和他们正在做什么
    格式:w [-hsfV] [user]

    选项说明:

    -h     不打印信息头。
    -s     使用短格式显示信息。
    -f     打印用户来源。
    -V     显示版本信息。
  38. who    查看当前用户的便当情况
    格式:who [-i][-u][-m]

    选项说明:

    -i     显示用户的活动状况。
    -u     与-i相同。
    -m     显示用户自身的情况。

系统分类: 嵌入式  |  用户分类: linux  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(491) | 回复(0)

发表于 2007/6/3 19:33:18

0

关于投票

linux下如何对串口编程

linux下如何对串口编程

Linux操作系统从一开始就对串行口提供了很好的支持,本文就Linux下的串行口通讯编程进行简单的介绍。

 串口简介

  串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。传输距离在码元畸变小于4%的情况下,传输电缆长度应为50英尺。

  Linux操作系统从一开始就对串行口提供了很好的支持,本文就Linux下的串行口通讯编程进行简单的介绍,如果要非常深入了解,建议看看本文所参考的《Serial Programming Guide for POSIX Operating Systems》

  串口操作

  串口操作需要的头文件

#include     <stdio.h>      /*标准输入输出定义*/
#include     <stdlib.h>     /*标准函数库定义*/
#include     <unistd.h>     /*Unix 标准函数定义*/
#include     <sys/types.h>  
#include     <sys/stat.h>   
#include     <fcntl.h>      /*文件控制定义*/
#include     <termios.h>    /*PPSIX 终端控制定义*/
#include     <errno.h>      /*错误号定义*/


打开串口

在 Linux 下串口文件是位于 /dev 下的。串口一 为 /dev/ttyS0,串口二 为 /dev/ttyS1。打开串口是通过使用标准的文件打开函数操作:

int fd;
/*以读写方式打开串口*/
fd = open( "/dev/ttyS0", O_RDWR);
if (-1 == fd){ 
/* 不能打开串口一*/ 
perror(" 提示错误!");
}


设置串口

最基本的设置串口包括波特率设置,效验位和停止位设置。串口的设置主要是设置 struct termios 结构体的各成员值。

struct termio
{	unsigned short  c_iflag;	/* 输入模式标志 */	
	unsigned short  c_oflag;		/* 输出模式标志 */	
	unsigned short  c_cflag;		/* 控制模式标志*/	
	unsigned short  c_lflag;		/* local mode flags */	
	unsigned char  c_line;		    /* line discipline */	
	unsigned char  c_cc[NCC];    /* control characters */
};


设置这个结构体很复杂,我这里就只说说常见的一些设置:

波特率设置 下面是修改波特率的代码:

struct  termios Opt;
tcgetattr(fd, &Opt);
cfsetispeed(&Opt,B19200);     /*设置为19200Bps*/
cfsetospeed(&Opt,B19200);
tcsetattr(fd,TCANOW,&Opt);


设置波特率的例子函数:

/**
*@brief  设置串口通信速率
*@param  fd     类型 int  打开串口的文件句柄
*@param  speed  类型 int  串口速度
*@return  void
*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
		B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400,  19200,  9600,  4800,  2400,  1200,  300, 38400,  
			19200,  9600, 4800, 2400, 1200,  300, };
void set_speed(int fd, int speed){
	int   i; 
	int   status; 
	struct termios   Opt;
	tcgetattr(fd, &Opt); 
	for ( i= 0;  i < sizeof(speed_arr) / sizeof(int);  i++) { 
		if  (speed == name_arr[i]) {     
			tcflush(fd, TCIOFLUSH);     
			cfsetispeed(&Opt, speed_arr[i]);  
			cfsetospeed(&Opt, speed_arr[i]);   
			status = tcsetattr(fd1, TCSANOW, &Opt);  
			if  (status != 0) {        
				perror("tcsetattr fd1");  
				return;     
			}    
			tcflush(fd,TCIOFLUSH);   
		}  
	}
}


设置效验的函数:

/**
*@brief   设置串口数据位,停止位和效验位
*@param  fd     类型  int  打开的串口文件句柄
*@param  databits 类型  int 数据位   取值 为 7 或者8
*@param  stopbits 类型  int 停止位   取值为 1 或者2
*@param  parity  类型  int  效验类型 取值为N,E,O,,S
*/
int set_Parity(int fd,int databits,int stopbits,int parity)
{ 
	struct termios options; 
	if  ( tcgetattr( fd,&options)  !=  0) { 
		perror("SetupSerial 1");     
		return(FALSE);  
	}
	options.c_cflag &= ~CSIZE; 
	switch (databits) /*设置数据位数*/
	{   
	case 7:		
		options.c_cflag |= CS7; 
		break;
	case 8:     
		options.c_cflag |= CS8;
		break;   
	default:    
		fprintf(stderr,"Unsupported data size\n"); return (FALSE);  
	}
switch (parity) 
{   
	case 'n':
	case 'N':    
		options.c_cflag &= ~PARENB;   /* Clear parity enable */
		options.c_iflag &= ~INPCK;     /* Enable parity checking */ 
		break;  
	case 'o':   
	case 'O':     
		options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/  
		options.c_iflag |= INPCK;             /* Disnable parity checking */ 
		break;  
	case 'e':  
	case 'E':   
		options.c_cflag |= PARENB;     /* Enable parity */    
		options.c_cflag &= ~PARODD;   /* 转换为偶效验*/     
		options.c_iflag |= INPCK;       /* Disnable parity checking */
		break;
	case 'S': 
	case 's':  /*as no parity*/   
	    options.c_cflag &= ~PARENB;
		options.c_cflag &= ~CSTOPB;break;  
	default:   
		fprintf(stderr,"Unsupported parity\n");    
		return (FALSE);  
	}  
/* 设置停止位*/  
switch (stopbits)
{   
	case 1:    
		options.c_cflag &= ~CSTOPB;  
		break;  
	case 2:    
		options.c_cflag |= CSTOPB;  
	   break;
	default:    
		 fprintf(stderr,"Unsupported stop bits\n");  
		 return (FALSE); 
} 
/* Set input parity option */ 
if (parity != 'n')   
	options.c_iflag |= INPCK; 
tcflush(fd,TCIFLUSH);
options.c_cc[VTIME] = 150; /* 设置超时15 seconds*/   
options.c_cc[VMIN] = 0; /* Update the options and do it NOW */
if (tcsetattr(fd,TCSANOW,&options) != 0)   
{ 
	perror("SetupSerial 3");   
	return (FALSE);  
} 
return (TRUE);  
}


需要注意的是: 如果不是开发终端之类的,只是串口传输数据,而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通讯,设置方式如下:

options.c_lflag  &= ~(ICANON | ECHO | ECHOE | ISIG);  /*Input*/
options.c_oflag  &= ~OPOST;   /*Output*/


读写串口

设置好串口之后,读写串口就很容易了,把串口当作文件读写就是。

·发送数据

char  buffer[1024];int    Length;int    nByte;nByte = write(fd, buffer ,Length)


·读取串口数据

使用文件操作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。可以使用操作文件的函数来实现异步读取,如fcntl,或者select等来操作。

char  buff[1024];int    Len;int  readByte = read(fd,buff,Len);


关闭串口

关闭串口就是关闭文件。

close(fd);


例子

下面是一个简单的读取串口数据的例子,使用了上面定义的一些函数和头文件

/**********************************************************************
代码说明:使用串口二测试的,发送的数据是字符,
但是没有发送字符串结束符号,所以接收到后,后面加上了结束符号。
我测试使用的是单片机发送数据到第二个串口,测试通过。
**********************************************************************/
#define FALSE  -1
#define TRUE   0
/*********************************************************************/
int OpenDev(char *Dev)
{
	int	fd = open( Dev, O_RDWR ); 
        //| O_NOCTTY | O_NDELAY	
	if (-1 == fd)	
	{ 			
		perror("Can't Open Serial Port");
		return -1;		
	}	
	else	
		return fd;
}
int main(int argc, char **argv){
	int fd;
	int nread;
	char buff[512];
	char *dev  = "/dev/ttyS1"; //串口二
	fd = OpenDev(dev);
	set_speed(fd,19200);
	if (set_Parity(fd,8,1,'N') == FALSE)  {
		printf("Set Parity Error\n");
		exit (0);
	}
while (1) //循环读取数据
{   
	while((nread = read(fd, buff, 512))>0)
	{ 
		printf("\nLen %d\n",nread); 
		buff[nread+1] = '\0';   
		printf( "\n%s", buff);   
	}
}
	//close(fd);  
	// exit (0);
}

系统分类: 嵌入式  |  用户分类: linux  |  标签: linux 串口  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(2512) | 回复(0)

Total , Page /