linux应用开发详解?linux用什么软件写程序

大家好,关于linux应用开发详解很多朋友都还不太明白,今天小编就来为大家分享关于linux用什么软件写程序的知识,希望对各位有所帮助!

嵌入式linux应用开发需要了解什么

我来帮助楼主解答下,我做嵌入式近十年了。

1:请问搞应用开发的需不需要深入了解Linux系统?

搞嵌入式的应用开发主要是对linux的一些C函数了解下就可以了,相对来说比较简单,所以如果定位在只是会高应用开发,确实不需要深入,但是如果你要把嵌入式学好,做好,那深入了解linux系统是必须的。

2:还有对硬件需要掌握到什么程度?

如果是应用开发人员,基本上对硬件没有什么要求,稍微懂得某个硬件是干什么的就可以。如果是底层的驱动开发人员和系统开发人员,那就需要掌握一些硬件的基本原理,比如如果配置这个硬件让他工作起来,而如果是做硬件的,那就需要对硬件精通了。

3:有些人说搞嵌入式开发最主要的是用C语言,也有人说用C++或Java?

确实主要是C语言,C++和JAVA并不多,不过C++可以用来编写QT界面,JAVA可以写android的应用程序。

4:请问嵌入式Linux系统下到底支持哪些开发语言?支不支持C#呢?

一般就是主要是C语言,不支持C#.

5:学Linux嵌入式开发是不是以后都要在Linux系统下用开发语言编写程序啊?

不需要,很多公司都在XP下用source insight写程序,然后在XP通过SSH连接到linux服务器编译。

6:多给楼主补充个好问题,关于如何学习嵌入式?

首先C语言,这个是毋庸置疑的,不管是做嵌入式软件还是硬件开发的人员,对C语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用C语言,你说不掌握它可以吗?至于如何学习C语言,我想这些基础的知识每个人都有自己的方法,关键要去学习,看书也好,网上找些视频看也好。很多人会问,C语言要学到怎么样,我觉得这没有标准的答案。我想至少你在明白了一些基础的概念后,就该写代码了,动手才是最重要的,当你动手了,遇到问题了,再反过来学习,反过来查查课本,那时的收获就不是你死看书能得到的。

其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的,当然,不是看书就能把这些理解透,如果不是一时能理解,没关系,多看看,结合以后的项目经验,会有更好的理解的。

还有应该学习嵌入式系统,如linux或者wince下的编程,这些对以后做应用的编程很有帮助,当然,如果做手机的话,那可以学习MTK、塞班、Android等操作系统,Android是以后发展的趋势,现在很热门,Android也是基于linux系统封装的,所以建议先学习下linux。

还有,应该学习下单片机或者ARM或者MIPS,很多人说我没有单片机的经验,直接学ARM可以吗?我觉得那完全没有问题的,当然如果你学习过单片机,那最好不过了,以后学习ARM就更简单了。

最后如果你把以上的知识都有所了解后,就该去阅读阅读一些优秀的代码,比如结合arm芯片手册学习去学习下UBOOT的源代码,了解下最小的系统开发,那对你整个嵌入式开发的非常有帮助的,可以的话,还可以学习下linux的源代码,当然如果你直接阅读2.6的代码,我想你会很痛苦的,可以先看看linux代码早期的版本,比如0.12的代码等等,麻雀虽小,五脏俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程师。

至于上面说的知识如何学习呢?每个人都应该去找自己最好的方法,所谓的最好的方法就是最适合自己的方法。很多人看不进书,那就去看看视频吧。视频也应该要选择,不是随便看看,应该要有所选择,有所挑选。我也是这样一路走过来的,不过我这人比较懒,我看不进书,一看书我就想睡觉,所以这几年我都是看视频过来的,现在也算学有所成,但也不敢说是高手吧。

我在网上看到,有人把自己学习嵌入式的视频总结出来,嵌入式系列实践和视频教程,大家可以看看网址我仔细看了觉得很不错,我本来也想整理下,可是奈何我自己的电脑硬盘空间才40G,没有办法,时间也是不够,心有余而力不足,我不是在帮他做广告,虽然要花钱,我觉得算不错,至少自己不用去整理和花大量的时间去找资源,当然如果网上有的下,你网速和硬盘都够的话,我建议大家自己网上下也好。想想我自己该开始学的时候,那时视频资源少之又少,我买书和买视频至少花了几千块,但是我觉得那很值,至少我现在赚回来了很多知识。

最后,希望这篇文章对热爱嵌入式,想致力于嵌入式开发的朋友有所帮助。送给大家一句简单而又朴素的话,坚持就是胜利,贵在坚持,也可以看看如何坚持嵌入式学习!

转自嵌入式学习网!

Linux开发需要什么呢需要具备什么基础呢

一、linux和os:

1、命令:netstat tcpdump ipcs ipcrm这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验

2、cpu内存硬盘等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看各进程状态抓包相关等相关命令必须熟练掌握

3、awk sed需掌握

4、共享内存的使用实现原理、然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?

5、c++进程内存空间分布(注意各部分的内存地址谁高谁低,注意栈从高道低分配,堆从低到高分配)

6、ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意.bss段)

7、使用过哪些进程间通讯机制,并详细说明

8、makefile编写,虽然比较基础,但是会被问到

9、gdb调试相关的经验,会被问到

10、如何定位内存泄露?

11、动态链接和静态链接的区别

12、32位系统一个进程最多多少堆内存

13、多线程和多进程的区别(重点必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)

14、写一个c程序辨别系统是64位 or 32位

15、写一个c程序辨别系统是大端or小端字节序

16、信号:列出常见的信号,信号怎么处理?

17、i++是否原子操作?并解释为什么???????

18、说出你所知道的各类linux系统的各类同步机制(重点),什么是死锁?如何避免死锁(每个技术面试官必问)

19、列举说明linux系统的各类异步机制

20、exit() _exit()的区别?

21、如何实现守护进程?

22、linux的内存管理机制是什么?

23、linux的任务调度机制是什么?

24、标准库函数和系统调用的区别?

25、补充一个问题:系统如何将一个信号通知到进程?

二、c语言:

1、宏定义和展开(必须精通)

2、位操作(必须精通)

3、指针操作和计算(必须精通)

4、内存分配(必须精通)

5、各类库函数必须非常熟练的实现

6、哪些库函数属于高危函数,为什么?(strcpy等等)

三、c++:

1、一个String类的完整实现必须很快速写出来(注意:赋值构造,operator=是关键)

2、虚函数的作用和实现原理(必问必考,实现原理必须很熟)

3、sizeof一个类求大小(注意成员变量,函数,虚函数,继承等等对大小的影响)

4、指针和引用的区别(一般都会问到)

5、多重类构造和析构的顺序

6、stl各容器的实现原理(必考)

7、extern c是干啥的,(必须将编译器的函数名修饰的机制解答的很透彻)

8、volatile是干啥用的,(必须将cpu的寄存器缓存机制回答的很透彻)

9、static const等等的用法,(能说出越多越好)

四、数据结构或者算法:

1、《离散数学》范围内的一切问题皆由可能被深入问到(最重要,最体现功底,最能加分,特别是各类树结构的实现和应用)

2、各类排序:大根堆的实现,快排(如何避免最糟糕的状态?),bitmap的运用等等

3、hash,任何一个技术面试官必问(例如为什么一般hashtable的桶数会取一个素数?如何有效避免hash结果值的碰撞)

五、网络编程:

1、tcp与udp的区别(必问)

2、udp调用connect有什么作用?

3、tcp连接中时序图,状态图,必须非常非常熟练

4、socket服务端的实现,select和epoll的区别(必问)

5、epoll哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认)

6、大规模连接上来,并发模型怎么设计

7、tcp结束连接怎么握手,time_wait状态是什么,为什么会有time_wait状态?哪一方会有time_wait状态,如何避免time_wait状态占用资源(必须回答的详细)

8、tcp头多少字节?哪些字段?(必问)

9、什么是滑动窗口(必问)

10、connect会阻塞,怎么解决?(必考必问,提示:设置非阻塞,返回之后用select检测状态)

11、如果select返回可读,结果只读到0字节,什么情况?

12、keepalive是什么东东?如何使用?

13、列举你所知道的tcp选项,并说明其作用。

14、socket什么情况下可读?

六、db:

1、mysql,会考sql语言,服务器数据库大规模数据怎么设计,db各种性能指标

linux下c开发了一个应用程序,它的扩展名是什么

这个貌似涉及到linux文件系统。linux文件系统与windows的不相同,windows系统应该是通过文件后缀来进行文件类型是别的,而linux虽然也会借鉴后缀信息,但好像不完全依赖于文件后缀。

比如,在windows下,讲一个txt的文件后缀改为.doc那么系统会提示更改后缀可能导致文件不可用,并且默认以office将其打开,而不是记事本。而在linux上你更改一个文件后缀,不会有系统提示,比如你将一个txt的文件(其实所谓的txt文件在linux下,默认是没有后缀的)后缀改为.pdf,系统任然是用打开txt文件的程序将其打开而不是PDFreader什么的。

说到底,linux文件系统不依赖后缀名来识别文件类型,而是靠一种什么幻数(magic number)。具体是怎样做到的,我也不知道,查查吧;查到记得告诉我,呵呵。。。

linux下c开发一个应用程序,默认后缀是.out。比如你用gcc编译一段C代码:

gcc文件名.c

gcc将默认产生一个a.out的可执行文件。而一般情况下,我们都会更改产生文件的名称,至于后缀,般没有后缀,或者按个人喜好吧。

如果是跨平台的代码的话,那就看目标系统是怎么样的了。像楼下说的ELF文件,这个貌似是16位可执行二进制文件。在linux上进行交叉编译时见过,就是在linux系统里编译一段别的机器(比如路由,PDA,等能装嵌入式linux系统的东西)上可以执行的代码。

阅读剩余
THE END