1. 这个怎么用
下载地址
1.
2.
一、常规问题
问:Unicode和Ansi版本是怎么回事,用一个更好?
Unicode是统一字符编码方式,Unicode版本的程序只能运行在NT/2000/XP/2003等新的Windows上,可以解决不同语言的显示问题,并且由于Unicode在这些系统上有更好的性能,所以当处理大量列表的时候也有很大的帮助。
千千静听内部处理字符串时(例如处理标签或列表时),大量使用系统默认的16位Unicode(即使是Ansi版本也一样,只是显示的时候才转换成Ansi),可以最大限度的提高处理的性能。
问:我是繁体XP(2000)的用户,可以使用千千静听吗?
可以,千千静听已经支持unicode,可以在非简体中文的Windows 2000/XP下使用,千千静听的界面不会出现乱码,但某些只包含ID3v1标签的MP3文件可能是显示乱码,可以尝试用“文件信息”里的内码转换功能来找到正确的内码。千千静听还提供了繁体和简体之间的标签和歌词转换。
问:安装新版本的时候,需要先删除以前的版本吗?
不用,直接覆盖安装就行了,千千静听可以兼容以前的参数设置,但某些功能可能因为升级而发生变化,绝大多数设置将继续有效。
问:为什么我的电脑上没有淡入淡出窗口的效果?
淡入淡出窗口以及半透明窗口效果都需要Windows2000或以上的操作系统才能支持。
问:我的窗口不小心拖动屏幕外面了,怎么办?
在Windows的系统栏(屏幕右下角的系统时间那里)右键点击主菜单,选“查看窗口”下面的“重新排列”,这个对普通模式和迷你模式都有效。
问:我想把千千支持的文件格式默认用千千来打开,怎么样最方便?
千千选项的最后一页“系统关联”,可以在你想要关联的某个格式,或某一类格式上打上勾,并且为这种或这一类格式指定一个文件类型图标,考虑到不同用户有不同的喜好,千千只提供图标自定义的功能,而不提供任何很多默认的图标。
问:为什么千千静听的皮肤这么少?
作者本人不擅长美工,又找不到专业人士帮助千千(因为千千免费)。其实千千静听的皮肤格式是比较简单的,是基于XML格式的用ZIP压缩一下而已,有兴趣的网友可以自己把皮肤文件改为.zip后缀后解开来看看,具体请看主页上皮肤 这一页。
问:为什么千千静听不支持Winamp的皮肤呢?
由于播放器的功能不相同,皮肤的设计和实现也不相同,很多千千静听需要的皮肤的元素Winamp的皮肤里都没有,例如千千静听需要歌词秀窗口,但Winamp本身就没有这个窗口的皮肤。论坛上有不少网友从winamp改造过来的皮肤,有兴趣不妨去看一下。
--------------------------------------------------------------------------------
二、播放
问:为什么在Win98下不支持播放CD?
Win98没有自带数字CD读取所需的驱动,可以到主页上去下载这个通用的驱动程序,地址是:
问:为什么我正在播放CD的时候,就不能转压CD为其它格式了?
因为Windows下以数字方式访问CD是独占的,所以同时只能由一个任何来访问CD。如果你想转压,请先停止播放。
问:千千有没有能自动在线查询到CD信息的功能?
4.3以后的版本,提供了freedb的在线查询CD信息的功能,但非正版的CD很可能找不到 。
问:为什么我用Windows Media Player制作的WMA文件无法播放?
Window Media Player在制作WMA文件时默认启用了"数字版权保护"机制,而要支持这种文件,必须得到微软的官方支持,考虑到手续比较麻烦所以目前还未实现对它的支持。所以在制作WMA文件的时候请尽量不要使用数字版权保护。
问:回放增益(自动音量)是怎么回事,应该如何使用?
"回放增益信息"是通过对音频文件的扫描分析检测到的一个最佳的增益值, 在以后的播放中如果使用这个增益值就可以把音频文件的音量调整到最佳的水平,从而减少甚至避免不同音频文件之间的音量差异.
可以通过手动扫描或自动扫描来得到这个信息,手动扫描就是在播放列表上右键某些文件,通过“扫描增益信息”来得到,或者选中千千选项的“播放”页中的“自动扫描”,这样在播放的同时,就会自动扫描没有这个信息的文件(如果已存在就不会再扫描),但要注意的是,如果播放被中断或用户拖动了播放进度,扫描就会停止,只有完整的播放一遍之后才能得出这个信息。
问:为什么我启用了回放增益以后,有些歌的音量不正常?
增益信息是以文件标签的形式保存在文件中的,可能是增益信息别的软件破坏了,所以导致音量不正常,这时,你需要手动重新扫描一下。
问:千千支持哪些音频输出方式?
千千支持Waveout(波形输出),DirectSound,Kernel Streaming(内核音频流),ASIO这四种方式,但在不同的系统和声卡环境下,并不是每一种都能支持的,特别是ASIO,更需要声卡本身的支持,一般只有比较高档的声卡才能支持。
问:这些音频输出方式各有什么特点?
Waveout是微软最早提出的音频流输出方式,所以它的兼容性也就好,几乎所有的声卡都支持;
DirectSound是微软DirectX的一个组合部分,它的兼容性也很不错,并且在有多个程序需要播放音频的时候能提供高可靠的保障,并且使用这种方式可以让千千静听更好的支持声音的淡入淡出效果;
Kernel Streaming是微软底层使用的音频流方式,具体更低的延时性,用于对延时性要求比较高的场和,因为更底层,所以效率更高,而且受别的程序的影响也更小,如果你用它来播放时,把系统音量里的波型“静音”,就可以实现只听到播放器的音乐,而不受其它程序的声音的影响。但Kernel Streaming同样对声卡和驱动有一定的要求。
ASIO是Steinberg提出来的比较新的音频流输入输出接口,一般用在对实时性要求很高的专业场合,对声卡的要求更高。
理论上来说,这四种方式对输出的音质没有任何影响,因为这些方式只是把声音的数字信号传输到声卡的数模转换器(D/A),而不会对信息有任何的改变。
问:像AxASIO之类的软件能让声卡不支持ASIO的电脑也使用ASIO,有什么好处吗?
AxASIO或ASIO Kernel-Streaming Driver之类的软件,都是在Kernel Streaming的基础上模拟出来的ASIO,所以效果反而没有直接用Kernel Streaming好,而且设备不当的话还影响正常的播放。
问:千千使用的MP3解码器是哪一个?
千千使用的是最新版本的mpg123-0.59s-pre,它是目前已经的开放源代码中最好的MP3解码器之一,无论是精度来是速度都是很出色的。千千早期版本使用的是MAD,但在个人PC上,MAD的解码速度比mpg123要慢70%甚至更多,而绝对精确和mpg123相比还略有差距,所以后来就改用mpg123了。
问:是不是把播放时的缓冲长度设得越高播放越流畅?
一般来说,只要设置1000-2000毫秒的长度就可以了,太长只会增加资源占用。
问:播放时的输出比特是越高越好吗?
不是,目前几乎所有的音频源都来自16比特的CD,而且一般的声卡只支持16比特的输出,所以基本上选用16比特就可以满足绝大多数的要求了,千千的“原始比特”就是指音频本身的比特数,因为碰到有些24比特的WMA,千千就会自动选择24比特输出。
要注意的是,很多支持ASIO的声卡,最佳的输出比特数是32或24,所以这时选择相对应的比特数就能提供最佳的性能(因为不需要再做额外的转换)。
问:采样频率转换一般用在什么场合?
对于AC’97规范的声卡(主板自带的基本上都是这类声卡),硬件只支持48000Hz这一种采样频率,而CD的音频是44100Hz的,从CD转换过来的MP3等大多部格式也是44100Hz的,也就是说在这种类型的声卡上,在数字信号转成模拟信号之前,还要对采样频率做一次转换,如果驱动程序提供的转换程序不是很好(据说为了提高性能,都采用比较一般的算法),就可以尝试用播放器提供的软件转换功能。但用于这类声卡来说,本身的输出音质就不是很理想,所以用不用更好的转换算法意义并不大,而且由于软件转换需要CPU做更多的事情,性能肯定受到影响。
问:高频抖动又是什么意思?
一般的音频编解码器,都是用高比特来处理16比特的音源的,在最终播放输出的时候,又得把高比特降低到16比特来输出(因为一般的声卡只支持16比特的输出),所以就会有量化的副作用,就好比把一幅真彩的图片转成256色,如果转换的程序不好,就会有大块的很难看的色块出现,于是就产生了一种抖动的技术,就是采用插值算法,在转换前用一些随机的噪声来处理一下,以减少量化带来的副作用。
一般来说,如果音源和输出时的比特数相同,就不需要再用抖动了。并且抖动只对低于16比特的输出比较好的效果。
--------------------------------------------------------------------------------
三、文件标签
问:什么是文件标签,有什么用途?
文件标签就是指一个歌曲文件的标题(歌名)、艺术家(演唱者)等的信息,就好像是一个人的姓名一样。有了文件标签,就能准确的知道这首歌的来源,就能通过这些信息准确的本机或网上查找到相应的歌词文件。
问:如何填写或编辑文件标签?
通过千千的“文件信息”对话框,就能编辑标签信息。有两种方法可以显示这个对话框:1。在播放某首歌的时候,在主窗口上右键的主菜单里选择“查看窗口”里的“文件信息”,这时显示的就是当前正在播放的这首歌的文件信息;2。在播放列表里选中某首或某些歌曲,在右键菜单中选择“文件信息”,就能显示选中文件的信息了,如果你选的是多首歌,就能同时编辑多首歌的信息。
问:千千支持哪些类型的标签?
千千几乎支持所有已知的通用标签类型,比如对于MP3文件,就支持ID3v1/ID3v2、APE;对于Ogg文件,就支持Ogg本身的Vorbis标签;而对于APE、MPC之类的新型文件格式,同样支持APE标签,对于iTunes的MP4/M4A格式,千千也同样支持它的标签类型;要注意的是,WMA的标签的写入需要安装微软的media9或更新的版本,但读取就不需要任何额外的支持了;而对于RM文件,千千目前只支持最基本的几个标签字段。
问:千千嵌入的歌词是怎么回事,和标签有关吗?
千千嵌入的歌词就是以标签的形式保存在歌曲文件里的,字段名是"Lyrics",对标签的操作对嵌入的歌词同样有效。
问:如何在播放列表的歌曲标题里显示我想要显示的标签字段?
可以在千千选项里的“播放列表”页里设置“有标签时的格式”,只要用“%(英文字段名)”这样的字符串就能表示任何你想要显示的字段了,当然前提是你得知道这些字段的英文名称,你可以通过上面讲到的“文件信息”对话框的“高级模式”来看到所有这个文件里已存在的标签字段的名字和值。
问:某些文件显示的是乱码的标签,有没有办法改正?
可以尝试使用“文件信息”里的内码转换功能来找到正确的内码。
问:为什么千千静听在列表里查找文件比较慢?
为了节省资源占用并且提高文件添加到列表的速度,千千静听默认是当播放列表在显示某个音频文件时才会读取信息,而像foobar2000这样的播放器则是在第一次添加时就读取了所有文件的信息,所以查找时就不需要再读取了。 事实上千千静听也提供了和foobar2000一样的文件信息操作方式,请在选项里的“播放列表”页中将读取信息改为“添加”时,并且选上“缓存文件信息到播放列表”。
--------------------------------------------------------------------------------
四、歌词
问:怎么使用歌词秀,为什么我自己从网上下载的歌词就不能显示?
歌词文件有一定的格式,一般以LRC和TXT后缀,每句歌词前面有[00:00.00]这样的时间标签,如果没有这些标签的歌词是无法显示的,可以用千千静听自带的歌词编辑器来为每句歌词加入时间标签,保存后就可以正常显示了。建议把歌词文件以“歌手名 - 歌曲名.lrc”这样的方式命名,再把存放这些歌词的目录加到千千的本地搜索文件夹里,以后就不用再一一关联了,当然你的歌曲文件应该也有相应的歌手名和歌曲名信息,这样才能保证播放器找到正确的歌词文件。
问:为什么歌词下载会失败?
有以下几种可能的原因:
1.文件信息不正确,以至于在搜索时无法正确匹配;
2.歌曲太新,以至于这些歌词网站都还没有收集歌词;
3.如果你安装了防火墙,可能网络请求被过滤而无法连接到歌词服务器;
4.歌词服务器可能出现问题,或者正在维护。
问:为什么没有让用户自己输入或选择歌词网站的功能?
歌词下载网站的搜索和下载方式都不相同,如果要实现用播放器来自动处理需要编写相应的搜索和下载程序,并不是简单的输入一个网址就行了。(注:用网络搜索到的歌词都是纯文本的歌词,无法直接用于歌词秀)
问:为什么我下载了正确的歌词,但下次播放还是显示错误的?
千千加载歌词的顺序是内嵌歌词->关联歌词->本地搜索->在线搜索,很可以内嵌或关联了错误的歌词,或在本机上有错误的歌词文件,这时你可以按上面的顺序来检查优先级高的歌词,如果发现有错误,就删除或修改就行了。具体操作请看歌词秀的右键菜单或选项里的和歌词相关的参数。
问:我想让下载后的歌词自动以歌曲相同的文件名保存,并且直接保存到歌曲所在的目录,这样我找起来很方便,怎样才能做到?
在千千选项的“歌词搜索”页里,有相关的参数可以设置。
问:我的标签信息和文件名都是繁体的,能找到简体的歌词吗?
如果使用的是Unicode版本,并且是2000以上的系统,就可以实现,但在线搜索只有炫网的搜索插件才支持,另外两个网站的搜索引擎不支持简繁体的自动识别。
--------------------------------------------------------------------------------
五、其它
问:我想在播放列表里直接删除硬盘上的文件,“物理删除”为什么是灰色的?
千千提供了物理删除的功能,但考虑到用户可能会误操作,所以默认是禁用的,你可以在千千选项的“播放列表”页中找到启用这项功能的选项。
问:我想从播放列表里直接到文件拖动到其它地方,比如我的U盘或MP3机,可以吗?
可以,在播放列表是选中要操作的文件,注意用左键按住标题(否则就变成选选择文件了,这和windows的资源管理器操作一样),拖动文件到你想要到地方,如果想复制,就按再Ctrl键,操作和资源管理器完全一致。用这种方法,你甚至可以直接把文件拖到回收站上而删除你不想要的文件。
问:我想把CD压缩成MP3、WMA或APE,用千千静听可以做到吗?
可以。通过添加文件或添加目录来把CD上的所有音轨文件拖到播放列表里面,因为数字方式抓取音轨是独占访问的,所以如果正在播放CD上的文件或是音轨,请先停止播放,然后在播放列表里选中要转压的文件(多选就可以进行批量转换),点右键菜单的“转换格式”命令就可以转换了,如果在压缩格式列表里没有找到MP3或WMA,请重新安装千千静听。用同样的方式可以转换任何千千静听可以播放的文件(例如APE等格式转换到MP3、WMA)。
问:为什么其它的播放器对RM的支持比千千静听好?
其它播放器用的是Real Player的播放器核心,其实就相当于在使用Real Player在播放,这和直接用Real Player来播放没多大区别,而且这个核心占用内存实在是比较厉害,所以作者不想采用这种方式。其实Real公司对RMF文件的格式只公开了部分内容,有些细节还没有完全公开,特别是和编码格式有关的部分,在现有的条件下,千千静听只能做到这样了,希望将来能得到更多的技术支持。
问:如果我的电脑上没有安装Windows Media Player 9或更新的版本,还能播放WMA吗?
当然可以,只要在安装时选中支持WMA就行了,千千静听支持WMA只用到了微软的WMA解码器组件,就是安装目录下的wmadmod.dll文件,只有400K左右J,而且还支持WMA文件信息的读取。
问:我要把一台电脑上的千千静听拷到另一台电脑上使用,所有的设置都还有用吗?
千千静听的设置都保存在安装后的目录下的TTPlayer.xml文件下,只要把这个文件和程序一起复制别的电脑上就可以了,根本就不需要重新安装,当然有些目录可能会因为不同的电脑而不一样,需要注意一下(比如歌词下载的保存目录会因为电脑的不同而无效)。
问:我对INI文件比较熟悉,为什么不用INI文件来保存这些设置?
INI是比较“过时”的配置文件,读取和分析都比较慢,扩展性也比较差,而XML是最好的用于保存各种信息的格式,而且现在对它的支持也越来越广泛,所以用XML是更好的选择。
问:为什么我在千千静听里使用DFX看不到DFX的窗口?
如果你的电脑上安装了Winamp,并且DFX也是安装在Winamp上,那只要把Winamp的Plugins目录设置为千千的Winamp音效目录应该就不会有任何问题了(默认情况下千千会检测到Winamp的插件目录并且自动设置),如果你没有安装Winamp,而把DFX安装到千千的目录上,你就应该手动把DFX安装后的目录下的Plugins目录设置为千千的Winamp音效插件目录。
问:为什么不支持视频?
作者设计千千静听的原则就是用来播放音频,至于要看到视频图像,有更多更好的选择,相信大家心中已经都有自己最喜爱的视频播放器了。
问:千千静听支持哪些网络协议的点播?
目前千千静听支持HTTP和MMS方式的在线点播,其中MMS协议需要Media Player 7或更高的版本支持。暂时不支持网上比较流行的RTSP协议。
问:千千静听是用什么语言写的,为什么支持这么多的格式还这么小巧?
千千静听是用VC6编写的,如果你还知道WTL,那么作者可以告诉你,界面是用WTL来编写的,相对于MFC的庸肿,WTL更适合编写快速、精简并且占用资源少的程序。当然很多音频编码库是用c语言来写的,这样更加高效而且小巧。
问:随着用的人越来越多,作者是否会考虑收费或者注册?
作者不会因为任何理由违背承诺来向用户收费!
问:为什么不在网站上做些宣传,好让更多的人知道?
我一直改进千千的理由不是为了钱,所以用的人多了对我本人来说也不见得就是好事,一个人做软件毕竟很辛苦,用的人太多引来的问题和麻烦也就更多。
问:我经常在某些论坛上看到推荐千千静听的贴子,有人说这是作者请的“枪手”在推荐?
这是最可笑的问题,但确实有不少网友来问!
我的回答是“绝对不是”,一方面上面也说过了,我本人对宣传不感兴趣,另一方面,我也请不起所谓的“枪手”。问问你自己或你身边的朋友,你们是如何知道千千静听的,是在媒体上看到的广告?是在论坛上看到大肆的推荐?还是朋友直接推荐给你的?
作者并不反对网友到不同的论坛上推荐千千静听,如果你认为千千是一个你喜欢的并且值得推荐的软件,那么有什么理由不让你去推荐给更多的人用呢?!
问:为什么取名叫“千千”,好像不太响亮哦?
作者很喜欢陈慧娴的歌,相信大家都知道为什么会用“千千”这个词了吧。其实当时之所以会自己写一个播放器也是因为觉得Winamp很多地方不太好用,总觉得要是有一个自己的播放器来听自己喜欢的歌那该多好啊,所以就有了今天的千千静听,希望大家会喜欢。
2. 千千静听
你可先用Word或文本文档两格式编好歌词
再打开千千静听在歌词绣屏幕上右击关联上你所编写的歌词
下面就是在歌词绣屏幕上出现一个编辑形式,其中有个"+"标志,是插入时间标签的工具,
然后就是播放此音乐时插入每句的时间标签(时间标签就是播放音乐时歌词绣屏幕里歌词出现的时间),但要听完这首歌才能完全编辑
当然这只是我的一个方法,可能还有更简便的方法.
3. c语言,用vc6.0++写一个程序,为什么编译和组建产生的文件名不同
VisualC++6.0简称VC或者VC6.0,是微软1998年推出的一款C/C++ IDE,界面友好,调试功能强大。VC6.0是一款革命性的产品,非常经典,至今仍然有很多企业和个人在使用,很多高校也将VC6.0作为C语言的教学基础,作为上机实验的工具。本教程中的代码,也都是在VC6.0下运行通过。
VC6.0 确实有点老了,如果不是学校要求或者项目需要,建议使用 Visual Studio 代替,这里之所以讲解 VC6.0,是为了照顾在校生或者有特殊需求的读者。
安装VC6.0
微软原版的 VC6.0 已经不容易找到,网上提供的都是经过第三方修改的版本,删除了一些使用不到的功能,增强了兼容性。这里我们使用 VC6.0 完整绿色版,它能够支持一般的 C/C++ 应用程序开发以及计算机二级考试。
下载地址:VC 6.0中文版下载
在VC6.0下运行C语言程序
C-Free 支持单个源文件的编译和链接,但是在VC6.0下,必须先创建工程(Project),然后再添加源文件。一个真正的软件,往往需要多个源文件和多种资源,例如图片、视频、控件等,通常是把它们放到一个文件夹下,进行有效的管理。你可以把工程理解为这样的一个文件夹,IDE通过工程来管理这些文件。工程有不同的类型,例如开发“黑窗口”的控制台程序,需要创建Win32 Console Application工程;开发带界面的GUI程序,需要创建Win32 Application工程。
1) 新建Win32 Console Application工程
打开VC6.0,在菜单栏中选择“文件 -> 新建”,或者 Ctrl+N,弹出下面的对话框:
注意:编译生成的 .exe 文件在工程目录下的Debug文件夹内。以上面的工程为例,路径为E:cDemo,打开看到有一个Debug文件夹,进入可以看到 cDemo.exe。
在Debug目录中还会看到一个名为 hello.obj 的文件。.obj是VC/VS生成的目标文件,类似于C-Free下的.o文件。
工程文件说明
进入工程目录 E:cDemo,除了 hello.c,还会看到很多其他文件,它们是VC6.0创建的,用来支持当前工程,不属于C语言的范围,你可以忽略它们。
如果读者感兴趣,我们也提供了简单的说明:
1) .dsp文件:DeveloperStudio Project,工程文件(文本格式),用来保存当前工程的信息,例如编译参数、包含的源文件等,不建议手动编辑。当需要打开一个工程时,打开该文件即可。
2).dsw文件:DeveloperStudio Workspace,工作区文件,和DSP类似。
3) .opt文件:IDE的Option文件,保存了与当前工程有关的开发环境的配置,例如工具条位置、打开的文件、光标位置等。
4) .plg文件:日志文件(HTML文件),保存了程序的编译信息,例如错误和警告等。
一个工程可以包含多个源文件和资源文件(图片、视频等),但只能生成一个二进制文件,例如可执行程序.exe、动态链接库.dll、静态链接库.lib等。工程类型决定了不同的配置信息,也决定了生成不同的二进制文件。
一个工作区可以包含多个工程,能够批量生成多个二进制文件。
我们安装的较大的程序,安装目录中一般包含多个 EXE 和 DLL。对于这样的程序,可以先创建一个工作区,再创建多个工程,这样就能一次性生成所需的多个二进制文件。
4. 如何制作软件批量安装包
软件疯狂装(批量安装常用软件) 简体中文绿色版
http://www.jz5u.com/soft/search.asp?act=topic&keyword=%C8%ED%BC%FE%B7%E8%BF%F1%D7%B0
5. Linux适合编程吗
如果只是从人工智能的角度来说,linux的优势并不大。我能想到的几个可能的优势有:
1) 包管理。比如你要用c++的一个库opencv,linux下面直接apt-get install libopencv,然后在makefile里面加上-I `pkg-config opencv`就好了。如果是(老版)visual studio里面你要先打开浏览器,搜索opencv的网站,下载,解压,记住路径,回到vs右击工程,点属性,vc++ directories,点编辑,点添加,把路径粘贴进去。蛋都要碎了。
但是!这个优势只在vs2010发布以前有效。新版的vs你只需要右击工程,点nu-get package manager,然后搜索opencv点确定就没了。
2) 各种自动化。比如你写了个训练svm的程序,有1000个svm要训练。在linux下面可以把这个训练的程序编译成可执行文件trainsvm,接口是类似./trainsvm input1.txt svm1.dat。然后在命令行下面seq 1 1000 | xargs -I{} -n 1 -P 12 bash -c './trainsvm input{}.txt svm{}.dat'一下就开了12个进程一块训练,某个进程训练完了以后立马会有下一个补上有木有。(就是管程的概念)我在windows下面用c#实现这样的功能要将近100行,还没有xargs灵活。批量处理超级方便啊。用parallel还可以在多台机器上分布式训练。
但是!你在windows上装个cygwin这些也全都有。。
3) 有时候数据量太大了需要去amazon租ec2并行计算。windows机器比linux贵啊摔。还有配置相对慢。linux弄个小脚本分分钟就把环境都配好了(夹个私货,比如这是我的ec2 linux配直脚本 https://github.com/grapeot/debianinit )。价格这个无解。。配置方面windows的非官方包管理器chocolatey还比较弱,如果有谁知道如何快速配置windows环境欢迎指教。
所以基本结论是,如果只是想日人工智能,老老实实拱算法先,哪个熟用哪个。如果蛋痛想折腾,linux可玩性和逼格都要更胜一筹。而且用熟了以后完成任务(get things done)的能力会加强不少。
6. 我想学习C语言 可我的电脑知识浅薄 我该买什么书(自学) 该用什么C语言什么编程软件
机高手的成长历程,我看之后感触颇深,希望对你也有帮助.
=========================================
这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向,所以把我的经历写出来与大家共勉,希望能给刚入行的朋友们一点点帮助。
一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS、 数据库,应用程序,做过通信 >软件、硬件驱动、 协议栈,到现在做操作系统内核和IC相关开发,这中间走了很多弯路,也吃了不少苦。
我上的是一个三流的高校,就连同一个城市的人多数都不知道。因为学校不好也就没有指望能靠学校名气找一个好工作。所有的希望都寄托在自己的努力上了,大一开学前的假期我就开始了学习,记得我买的第一本书是《 计算机基础DOS3.0》,大家别吓着了,其实当时已经普及了DOS6.22了,只是我在书店里看到了DOS4.0,5.0,6.0的书,以为像英语那样是第四、五、六册,记得当时到处找DOS1.0,现在想想也幸好我没有找到:)开学前我学完了PASCAL,那时既没有 计算机也没有人可以请教,我连程序是什么的概念都没有,只好死记硬背 代码,然后拿纸写,我一直到大三才有了一台486,在这之前用纸写了多少程序我也记不清楚了,只知道最长的一个我拿A4大小的草稿纸写了30多页,我的C语言、C++、VC都是在这样的条件下 入门的。所以说条件是可以克服的,希望我的经历多少给条件艰苦的同学们一点信心。第一次上机是在我姐夫的机房,我的心情激动的无与伦比,但是一上机我立刻傻了眼,他们用的是英文版的in3.1,我的那点DOS 知识都见了鬼,上机提心吊胆的一阵瞎摸,一不小心把Word弄成了全屏,怎么都还不了原,当时真是心急如焚,我以为机器被我弄坏了。第一个C语言程序,就是那个经典的HelloWorld,我调了几个星期,上机机会非常少,也没有书告诉我开发环境(TC2.0)需要设置,而且开始我都不知道有编译器,我甚至自作聪明把写好的程序扩展名从.c改成.exe,结果可想而知。大一学完了C、X86的汇编、数据结构、C++。由于精力都花在自学上了,大一下四门课挂了彩,三类学校就是这点好,挂上一二十门也照样毕业。不过扯远点说,我那么刻苦都及不了格,可见我们国家的 计算机教育有多死板。
大二准备学VC和BC,当时难以取舍,后来选了VC,不为别的,只为书店里两本书,VC那本便宜6块钱。我的努力在班上无人能及,学的日夜不分,大三有了 计算机后更是如此,很多次父亲半夜教训我说我不要命了,我一直觉得自己基础差,记忆又不行,条件也不好,所以觉得只有多花点时间才能赶上别人。居然后来有许多朋友说我有学 计算机的天赋,让我哭笑不得。我用的是486,16M内存,1G硬盘,当时同学们的配置都是P166MMX,我安装一个indowsNT4.0需要一个通宵,编译一个BC5.0向导生成的程序需要近两个小时,我的显示器是个二手的,辐射非常大,开机屏幕冒火花,看起来很酷的:),有一次程序写的太久,觉得怎么白色的编辑器背景变成了紫色,以为显示器坏了,后来才发现眼睛不行了,不过说来也奇怪,到今天我的视力还能保持1.5,真是个奇迹。但是就是那台破机器陪伴了我两年,让我学会了VC、Delphi、SQLServer等。后来那台机器给我阿姨打字用,据她说一天她正打的开心,一股青烟夹着火苗从显示器钻出来,之后它才寿终正寝。
大三假期找了个机会在一个 计算机研究所实习,与其说实习不如说是做义工,工作了两个月一分钱没有拿。但是这两个月对我的发展帮助很大,让我早一步了解了社会,刚去的时候我当然是一窍不通,在那里我熟悉了网络,学会了Delphi和Oracle。由于工作很认真,得到了比较好的评价,在一位长者的引荐下,我开始和他们一起做项目,这使我在大三大四就有了自己的收入,大四又找了两家MIS公司兼职,虽然钱不多,但是在学生期间有1000多的收入我已经非常满足了,我终于用自己赚的钱把 计算机换了。大四下开始找工作,这时我的工作经验已经比较多(当然现在想想非常幼稚),开始听父母的想去那个研究所,实习过那个部门也希望我能去,但是不知道为什么最后不了了之,这种单位就是比较官僚,我一气之下就到了我兼职的一个公司做MIS的TeamLeader。在大三到毕业一年的时间,做过了各种MIS,从煤气、烟厂、公安、铁路、饮食到高校,什么有钱做什么,工作也很辛苦,经常加班和熬通宵,从跟客户谈需求到设计、编码、测试、交付都要上。那时觉得很有成就感,觉得自己还不错,现在想想真是很肤浅。
刚走上工作岗位的学生很容易被误导,各种开发 工具让人眼花缭乱,同时也觉得很受公司器重,但这样工作永远是一个低层次的开发者。不要跟我说什么系统分析有多么多么重要,多么多么难。你以为自己跟用户谈需求做设计就是系统分析和设计了吗,国内又有几个公司能够做的很到位很规范?我是ISO9000内审员,也在Rational公司受过多次培训,拿了4个证书,还有一个公司让我去做CMM。这些我听过很多,但是很多事情到国内就变了性质,一个公司不是通过了ISO9000或者CMM就能规范了,我现在在一家有几十年历史的外企工作,里面的管理不是一般国内企业能及的。作为一个毕业不久以前没有步入过社会的学生,几乎不可能在很短的时间掌握系统分析和设计,面向对象、UML只是一个 工具,关键是人本身的思想,不是说你熟悉了C++、Rose就能够做出好的设计,相反如果你具备了很高的素质,你可以用C写出比别人用C++更加模块化的程序。
话说远一些,国内 >软件开发行业有一个怪圈,很多人觉得VC>Delphi>VB,真是很搞笑。这几个 >软件我都做过开发,说白了他们都是 工具,应该根据应用的需要选择采用哪个,而不是觉得哪个上层次。如果你因为用某个开发 工具很有面子而选择的话,只能说明你很浅薄。如果说层次,那么这些 工具都不上层次,因为它们用来用去都是一些系统的API,微软的朋友不会因为你记住他们多少个API或者多少个类就会觉得你很了不起,你永远只是他们的客户,他们看重的是你口袋里的银子。我也做过系统内核,我也封装过很多API,同样我也不会看重那些使用这些API做二次开发的客户,除非他能够作出自己独到的设计。
至于有人认为C++>C那更是让人笑掉大牙,不妨你去打听一下,现在有几个操作系统内核是用C++写的,又有几个实时系统用的是C++,当然我也不是说C++不好,但是目前的内核和实时系统中C++还无法与C匹敌,至于说C++适合做应用系统的开发那是另外一回事。所以我的观点是不在于你用什么 工具和语言,而在于你干什么工作。你的设计体现了你的 技术层次。
这样干了一年我觉得非常苦闷,做的大多数都是熟练工种的活,个人 技术上没有太多的提高也看不到方向。所以决定离开这个城市去上海,寻求更好的发展,并且打算放弃我以前的MIS转到通信行业。
写到这里不能不提到我女朋友,我们是在来上海前半年认识的,她大四在我公司实习,公司派她给我写文档,我们的感情发展的很快。她告诉我很多事情,她家原本是改革开放的第一批暴发户,她母亲爱打牌,输掉了几百万,还欠了很多债,她有男朋友,但是她对他没有感情,只因为他给了她母亲两万多块钱,后来还强迫她写了四万块的借条,她男朋友背叛过她并且不止一次打她,现在逼她结婚不然就要她还钱。这人居然还是一个高校的老师!她母亲把父亲给她的学费花了,因为拖欠学费她没有办法拿到毕业证。她母亲现在有病需要钱,我拿出了自己的一点积蓄并且跟朋友们接了一些,替她交了学费并给她母亲看病(后来才知道看病的钱又不知所终,就连她母亲是不是有病我都不知道,但她也是没有办法)。这个时候我家知道了一些事情,坚决反对我和她在一起,她原来的男朋友也极力破坏。无奈之下我们决定早一定离开这个伤心的城市,并且瞒着我们家。由于时间仓促,我只准备了4000块钱,她仅有的几百块钱也被她母亲要去了,我买了三张票,一张是中午的,两张是晚上的,中午我的家人把我送上船,他们一离开我就下了船,我和她乘坐晚上的船离开了这个我和她生活了很多年的城市,带走的只是一身债务。没有来过上海的我们两个性倔强,都不愿意去麻烦同学和朋友。来到上海是傍晚6点半,我们都不知道该去哪里,我们找了一个20块钱的旅馆,这个房间连窗户都没有,7月份的天气酷热难耐,房间里非常闷热。第二天我们开始租房子,因为身上的钱不多,我们基本都是步行,花了一个星期时间,不知道在浦东转了多少圈后找到了一个400块的房子,但是我们都不了解上海是付三压一,还要付半个月的中介费,买了一些锅碗瓢盆后,我们身上只有800块钱了,工作都还没有着落,这800块钱要支持到我们拿到第一个月工资,为了省钱我们自己做饭,每天买菜只花两块钱,她非常喜欢吃(也可能她在大学经常挨饿的愿意),看到她现在这样省吃俭用我真的很不忍心。她以前的男朋友也没有放过她,经常打电话来骚扰,并且来上海看她,还说了不少恐吓她的话,她过于善良,说他以前毕竟帮助过她,叫我不要与他一般见识。以后的每天在家就是苦等面试通知,原本我想迅速找一家MIS公司解决眼前的困难,但是她坚持让我不要放弃自己的理想,终于功夫不负有心人,我找到了一家通信公司,4000块的工资虽然赶不上MIS公司给我开出的价位,但也够在上海生存。她也找到了工作,第一天上班她哭了,这是她来上海第一次流泪,我心里很难受也很感动。
由于是全新的行业,我把自己降到了零点,我学的VC、Delphi、 数据库派不上用场,摆在我面前的是嵌入式、协议、信令一些我从未接触过的 知识。我知道我没有退路,于是拼命的学习,我把自己当做一个应届毕业生一样,一分努力一分收获,半年过去我终于熟悉了工作,并且得到了公司的表彰,薪水也加了一级。后面的日子里我们省吃俭用,把欠朋友的1万多块钱还了,日子终于上了正轨。这时女朋友告诉我她想考研究生,我也很支持,于是她辞职在家备考。
另外,在这里我要感谢我的ProjectManager,他原来是一个大通信公司的产品经理,对人非常和善,我从他那里学到了很多 知识,而且他也给了我许许多多无私的帮助。在工作上他给我充分的空间和信任。记得公司安排我维护一个接入服务器 >软件,由于 代码量不算太小(5万行),资料和文档都不齐全,我维护起来非常吃力,所以想重新把它做一遍,公司领导不太支持,可能觉得工作量太大,但是他极力支持我,私下里他让我放手去做,我的维护工作他挤时间做。在他的支持下,我花了半年时间完成了接入服务器的 >软件,并且实现了一个相对完整的 TCP/IP 协议栈。在这里我学会了嵌入式系统设计、驱动开发、 TCP/IP和很多通信的 知识,我花了一年时间终于使自己从MIS开发转到了通信行业,并且站稳了脚跟。我的开发大量是对硬件的直接操作,不再受微软的操作系统,VC、Delhpi这些开发 工具的约束,我终于看到了另外一片天空。
我做事情喜欢追根问底,随着开发的深入, >软件开发与硬件联系越来越紧密,硬件 知识的匮乏又对我的发展产生了障碍,而且芯片 技术基本上掌握在国外公司的手里,这对做系统级设计是一个非常大的制约,一个新产品出来,第一道利润(也往往是最丰厚的利润)常常都被IC公司如Intel、Motorola赚去了,国内的厂商只能喝点汤。所以我决心解决自己的硬件 技术障碍,并打算离开通信行业,进入IC设计相关领域。
当然我明白如果我对硬件了解的非常少,没有哪家IC公司会仁慈到招我这样一个一窍不通的人来培训。所以我必须努力打好基础,学一些相关 知识为以后做准备。就像我开始从MIS转到通信一样,我看过大量通信方面的书,并且给一个ISP做过RADIUS计费分拣台,在这样的背景下这家通信公司才给了我这个机会。我在的通信公司是做系统设计的,有不少PCBLayout硬件人员,平常我就注意向他们学习,由于我做的是 >软件,在公司看硬件资料不好意思,所以开始只好在家看,刚来上海工作我连续一年都在加班,后来不加了,因为我要挤出时间学习,通常我12点左右睡,第二天5点半起,我上班比较早,地铁上如果人不多我也用来看书。学习当然不会是一帆风顺的,有些实在不懂的问题就积累起来问硬件人员,他们的帮助使我学习进度快了很多,因为在没有人点拨的情况下自学,我的一半时间是花在解决疑难问题上,但这种问题经常是别人的一句话就可以让我豁然开朗,我非常庆幸我有这样的学习环境。在后面的一年里,我学会了看硬件原理图,学会了简单的硬件设计(模拟电路方面还有不小的差距),事情就是这样的,当你安安份份做 >软件,别人永远认为你是 >软件开发人员,在你开始学习硬件时别人未必会认同,有位中兴通讯的朋友还对我说过,一个人不可能把所有东西都学完。我也明白这一点,但我希望自己做的更好。但当你熟悉硬件后大家又会觉得你好像原本就是软硬件都懂的,同事们也都习以为常了。这个时候我可以把硬件资料堂堂正正的拿到公司看,没有人再大惊小怪了。让我比较自豪的是我通过自己的努力做了一个IAD(软交换的终端设备)系统方案,包含软硬件的选型、设计等内容,这个方案得到了公司和同事们的认同,让我感到非常欣慰。
技术是相辅相成的,当我的硬件有了一定的进步后,我的 >软件设计也有了很大的提高,我可以从更深层次理解问题,我做的接入服务器CPU是MotorolaPowerPC860,熟悉的朋友都知道860QMC与 >软件的批量数据传输通常采用BD表的方式,硬件人员做驱动的时候习惯采用固定BD表,每接收或发送数据都将数据从BD表拷贝到用户Buffer,或从用户Buffer拷
贝到BD表,由于理解的比较深入,我自己重新实现了这个过程,采用动态BD表的方式,驱动从一个网口接收数据,提交给我的 >软件进行三层交换,直至从另外的接口发送出去,没有进行一次拷贝。这样的设计大大提高了性能,使系统的指标接近理论值。软硬件的结合使我的设计水平上了一个台阶。我现在写的这个操作系统,编译后我把程序反编译成汇编,找出其中不优化的 代码,然后在C程序中进行调整。举个例子,很多CPU没有专门的乘法指令,这个大家应该都知道,在这种CPU上进行一个乘法操作常常会花费大量的指令周期,有的朋友会说这个我知道,我会尽量避免采用×号,但是事情往往不是那么简单,你知道C语言中数组的下标操作是怎么实现的吗?仔细看看反汇编的 代码你就会明白,同样是通过下标的定位操作,C编译器会有时候会产生位移指令,但有时候会用乘法实现,两者效率往往是天壤之别,所以明白这些问题你才能将系统性能提升到极致。这些问题就不多说了,有兴趣的话以后可以共同探讨。
话说远一点,我由衷的希望在 >软件上做的比较深入的朋友们有机会学学硬件以及其它相关 知识,尤其是做底层开发和嵌入式设计的。这对 >软件 技术的提高有非常大的帮助,否则很多事情你只知道该这样但不会明白为什么该这样。我这个观点在我现在的IC公司ProjectManager那里也得到了验证。他告诉我们公司现在的802.11芯片产品的 >软件经理原本是做该芯片硬件设计的,某某某原本是做 >软件的,现在在做IC,类似的例子还有很多,只是在国内这样的风气不是非常流行。
我有一些心得体会与大家分享,只有当我干好本职工作后,我才会学习与工作关系不大的 技术,这样公司的上司才不至于反感,在 入门阶段的问题我通常不去问那些资深人士,而是问一些资历比较浅的朋友,比如刚毕业不久的学生,因为他们往往会跟你详细的讲解,而资深人士通常觉得你的问题太简单,所以回答的也很简单,我又不好意思多问。等 技术上了一定的层次后我才会问他们,他们也能给你比较深入的回答。另外,有些朋友说我机会比较好,他们也希望能从事新的工作可惜没有机会,我听了只有苦笑,我的机会了解的人都应该知道,我没有出生在什么IT世家:)也没有谁一路提拔我,所有的路都是自己走出来的,我母亲去世比较早,我的后母(我叫她阿姨)看着我努力过来的,一次她看我大年30还在写程序,她说像我这样努力木头都能学出来。
我的最终目的是IC而不是PCB,所以我下一步的准备开始学习IC设计的 知识。公司的同事没有懂IC设计的,后面的路又要靠自己了,我买了不少相关的书,在网上也查了很多的资料,我花了大量的时间去学习VHDL,并且用 >软件进行了一些简单的设计和仿真(没有设计ASIC,只是针对FPGA),随着学习的深入,我渐渐明白了IC设计的基本流程,同时也明白了这条路的艰辛。这个时候我已经做好了跳槽的准备,我向一家业界又一定知名度的IC设计公司投了简历,并通过了漫长的面试(4个多小时)。其他的一切我都比较满意,唯独薪资差强人意,我也明白原因,因为我是这个行业的新人,我没有经验,我再一次将自己清零了。公司老板问我6000多一个月能不能接受,我知道他也是照章办事。想想我通信行业的朋友们,基本上都是年薪10万以上,月薪过万的也比比皆是,朋友们也帮我介绍了不少待遇不错的公司,我该怎么选择,当时我很犹豫,我热爱我的事业,我向往我的追求,但我也是一个普通的人,我也需要养家糊口,我也想早一点买房买车。生活给我出了一道难题。
爱因斯坦在63岁时说过"一个人没有在30岁以前达成科学上的最大成就,那他永远都不会有。"这句话给了我很大的压力和震动,我马上就26岁了,离30只有四年时间,我必须抓紧这几年宝贵的时间,努力达到我 技术上的最高峰。为了这个理想,为了能离自己的梦更近一些,我选择了这家IC公司,我明白自己的薪资和公司刚进来的硕士研究生相差无几,但为了今后的发展只能忍受,一切又得重新开始。换行业是一个非常痛苦的过程,尤其从一个春风得意的位置换到一个陌生的岗位,感觉象从温暖的被子里钻出来跳进冰水中,让人难以接受。在原来那家通信公司,我是唯一两年时间涨了五次工资的员工,公司和同事都给了我极大的认可,工作上也常常被委以重任。但现在这一切都成了过去,在新的公司我只是一个新人,没有人知道也没有人在意我过去的成绩。我决定重新开始,我把自己看作新毕业的学生,我要用自己的努力得到公司的认可。进入新的行业是非常痛苦的,我告诉自己必须忍受这一切,虽然外面有很多诱惑,但是既然作出了选择我就不允许自己轻易放弃。
我现在已经在这家新公司上了一个多月的班,开始非常艰难,现在慢慢适应了。第一个月结束时,TeamLeader找我谈话,说我是新进员工中最优秀的一个,我心里很欣慰,这也算对我努力的一个肯定吧。在这里还要感谢我的女朋友,她给了我很大的支持和鼓舞,每次在我动摇的时候她都在鼓励我,让我坚持自己的理想,刚来上海是她让我不要勉强去做MIS,这次也是她让我顶住了月薪过万的诱惑,没有她我可能不会有今天的成绩。
现在的公司有自己的操作系统,自己的CPU、DSP和其它芯片,在这里我能学到世界上最先进的 技术,我们的设计开发不再完全依赖别人的硬件和系统,这让我很开心。我打算等工作步入正轨后,全力学习新的 知识,实现我的理想。
在后面的两年里我给自己定下了几个目标:
一.努力做好本职工作,在工作上得到公司和同事们的认同;
二.努力学习IC硬件设计 知识,多向同事请教,并利用一切机会多实践;
三.实现我的实时操作系统的主要部分,完成 TCP/IP 协议栈模块,并免费发布源 代码;
四.和我女朋友结婚并买一套小房子,这是最重要的,因为我明白事业是可以重来的,但是珍贵的感情很难失而复得。
在这里提一下我现在开发的操作系统,它是一个实时嵌入式系统,目前支持以下特性:
a.支持时间片轮转调度和基于优先级调度,最多64个优先级;
b.抢占式实时内核;
c.为了便于移植,主体用标准C实现;
d.汇编 代码非常少,不到100行;
e.支持任务管理,各任务有独立的堆栈;
f.进程同步和通信目前完成了Semaphore,MessageQueue正在调试;
g.实现了定时系统调用;
h.可以在windows上仿真调试
我还打算下一步实现优先级反转保护,EventFlag,DataPipe,内存管理(以前实现过)、驱动接口等。在这之后我还会努力完善它,比如加入文件系统, 协议栈、调试接口等。希望朋友们提出自己的意见和建议,在此不胜感激!
后记:
就像有的朋友说的,我的经历或许会给一些朋友产生误导,在这里我必须说明一下。我来上海以前学习过于拼命,常常晚上只睡3个多小时,我身高1米71,那时只有108斤(我现在130多),家人也说我这样拼命活不过60岁,但是当时的我太固执,我对他们说只要能实现理想活50岁我就够了。那时的拼命使我的身体受到了影响,有一次早上突然腰肌剧痛难忍,痛的我倒在床上站不起来。虽然我现在已经比较注意,但有时候还会隐隐作痛。后来在女朋友说服了我,来上海以后我不再如此。我经常引用父亲的一句话"身体是革命的本钱"。
而且我也发现拼命不是办法,我可以熬一两个通宵,最多的一次我连续工作了三天三夜,但是我半个月都没有恢复过来,这样是不是得不偿失?学习工作应该是一个长期的过程,像马拉松而不是百米冲刺。我现在非常注意调整学习和工作的强度,我要保证每天尽量有相对充沛的精力,一些年轻的朋友觉得自己也应该拼命努力,这让我多少有些担心,如果我的故事能让你在学习工作上多一点兴趣,我会感到很开心,但如果误导了某些朋友,让你做一些不值得的付出,我会感到很内疚。
技术没有贵贱只分,我以前换行业是因为自己的兴趣所致,而不是对哪个行业有什么偏见。我希望我的经历不要给朋友一个错误的导向,觉得我始终向更高的 技术发展。其实各行各业做到顶尖都是很困难的。话又说回来虽然 技术没有贵贱,但是门槛是有高低的,无论如何,做IC的门槛要比做网页的高,这一点无可否认。国家各种人才都是需要的,但是作为个人奋发向上的想法还是应该有的,努力在自己喜欢的行业上做的更好,而不应该停留在比较肤浅的层次上。
我是一个自己觉得比较有自知之明的人,或许我最大的优点就是知道自己有很多缺点:)。我的故事中很多的曲折和错误都是由我的缺点造成的,希望大家用审慎的眼光看待我的经历,不要被我的"花言巧语"所迷惑。我学习有些随心所欲,这给我带来了无尽的麻烦,也大大阻碍的我的发展。记得我小时候成绩比较出色,但是后来学习严重偏科,导致我中学成绩一再滑坡,也没有考上什么好的学校,小时候的一个朋友,当时的成绩和我相仿,但是没有我这个缺点,她上了清华,后来在去了美国深造,在一个着名导师手下研究理论科学,这未尝不是一条更好的出路。另外我的学习方法也是在不断改善中的,过去的学习过于讲究数量和时间,那样学习既苦而已效率不高,现在我非常注意学习的效率和技巧,这样才是学习的捷径(当然不是指投机取巧),比如说学一相对陌生的 技术,如果有条件,不妨问一问有经验的人,不需要问很多,往往他不经意的几句话会给你非常大的帮助,甚至超过你看一个星期的书。带着这样的思想再去学习你会节省很多时间,这样何乐不为呢?这些年中我学了不少的东西,由于开始非常盲目,所以学的东西杂乱无章,现在回想起来让我啼笑皆非,我把大量的时间浪费在一些没有必要深入了解的 知识上,毕竟一个人的精力是有限度的。很多朋友很我一样都背过五笔字形,的确它是个不错的输入法,但是对一个研发人员它绝对不值得你去背,你的时间应该花在有价值的地方。我这样的事情还做过很多,我背过CCED、WPS的命令和快捷键,在dBase基本退出历史舞台后我还花了很多时间去学习它的使用。所以我的学习在前期缺乏规划,没有明确的短期目的、中期目标,只有一个虚无飘渺的长期的理想。这就像做设计一样,好的设计是从需求抽象到 代码有很多过程,而不能得到了需求就立刻开始开始编码。
7. 怎么实现软件自动安装
看着你的问题,想起了好几年前的自己。因为当年的我,跟你有一样的想法。
当时我是用C语言写了一个程序,实现了这个需求,但是其实后来我自己发现,其实这个东西我也从来都没用到过。
现在电脑里面都很少装软件,只是一些工作需要的软件,而这些工作需要的软件,是没有办法一键安装,因为这些软件大部分都需要一些配置才能使用。
然后至于什么QQ,播放器之类的,一般重装系统之后,去官网下载就OK了,也不折腾了。尤其是用win8之后,能在商店里下的,都在商店里下了。
8. 如何新建一个批量处理文件del.bat.新建这种文件需要装什么新的软件吗
不需要,都是写出来的,新建一个文本文档,写完之后把它保存为del.bat就行了,双击就可以运行,这里顺便提供常用批处理文件命令给你参考下。 1.Echo 命令 打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。 语法 echo [{on│off}] [message] Sample:@echo off / echo hello world 在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。 2.@ 命令 表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。 Sample:@echo off @echo Now initializing the program,please wait a minite... @format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。) 3.Goto 命令 指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。 语法:goto label (label是参数,指定所要转向的批处理程序中的行。) Sample: if {%1}=={} goto noparms if {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。) @Rem check parameters if null show usage :noparms echo Usage: monitor.bat ServerIP PortNumber goto end 标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。 4.Rem 命令 注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。 Rem Message Sample:@Rem Here is the description. 5.Pause 命令 运行 Pause 命令时,将显示下面的消息: Press any key to continue . . . Sample: @echo off :begin a:*.* d:\back echo Please put a new disk into driver A pause goto begin 在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。 6.Call 命令 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。 语法 call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]] 参数 [Drive:}[Path] FileName 指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。 7.start 命令 调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。 入侵常用参数: MIN 开始时窗口最小化 SEPARATE 在分开的空间内开始 16 位 Windows 程序 HIGH 在 HIGH 优先级类别开始应用程序 REALTIME 在 REALTIME 优先级类别开始应用程序 WAIT 启动应用程序并等候它结束 parameters 这些为传送到命令/程序的参数 执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。 8.choice 命令 choice 使用
9. 如何新建一个批量处理文件del.bat.新建这种文件需要装什么新的软件吗
不需要,都是写出来的,新建一个文本文档,写完之后把它保存为del.bat就行了,双击就可以运行,这里顺便提供常用批处理文件命令给你参考下。
1.Echo 命令
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
语法
echo [{on│off}] [message]
Sample:@echo off / echo hello world
在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。
2.@ 命令
表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。
Sample:@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)
3.Goto 命令
指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
Sample:
if {%1}=={} goto noparms
if {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。
4.Rem 命令
注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。
Rem Message
Sample:@Rem Here is the description.
5.Pause 命令
运行 Pause 命令时,将显示下面的消息:
Press any key to continue . . .
Sample:
@echo off
:begin
a:*.* d:\back
echo Please put a new disk into driver A
pause
goto begin
在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。
6.Call 命令
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。
语法
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数
[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。
7.start 命令
调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
入侵常用参数:
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。
8.choice 命令
choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234......
如: choice /c:dme defrag,mem,end
将显示
defrag,mem,end[D,M,E]?
Sample:
Sample.bat的内容如下:
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (应先判断数值最高的错误码)
if errorlevel 2 goto mem
if errotlevel 1 goto end
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。
9.If 命令
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:
1、if "参数" == "字符串" 待执行的命令
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms
2、if exist 文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。
如if exist config.sys edit config.sys
3、if errorlevel / if not errorlevel 数字 待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。
如if errorlevel 2 goto x2
DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。
10.for 命令
for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
10. c语言初学者!要学的是c primer plus(第五版),想要个支持c99的编译器!我的电脑是w
最新版本,支持win10 64位
社区版(个人免费):
http://download.microsoft.com/download/B/4/8/B4870509-05CB-447C-878F-2F80E4CB464C/vs2015.com_chs.iso
专业版:
http://download.microsoft.com/download/B/8/9/B898E46E-CBAE-4045-A8E2-2D33DD36F3C4/vs2015.pro_chs.iso
企业版:
http://download.microsoft.com/download/B/8/F/B8F1470D-2396-4E7A-83F5-AC09154EB925/vs2015.ent_chs.iso
测试专业版:
http://download.microsoft.com/download/0/9/5/095317BD-41B4-4D71-AAE8-C2D1D1033B92/vs2015.testpro_chs.iso
更多下载:
https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs
附送专业版批量激活秘钥一枚:HMGNV-WCYXV-X7G9W-YCX63-B98R2