linux开发c语言
首先需要有一个安装好gcc的Linux系统,然后进行代码的编写进行测试演示
工具:
Ubuntu12.04
步骤
进入Linux系统后,启动一个shell命令终端,在Ubuntu的三键启动终端方法是同时按下Ctrl键+Alt键+t启动后如下图所示:
2. linux浣跨敤gcc缂栬疟c璇瑷绋嫔簭linux浣跨敤gcc
Linux镄刧cc鏄镐庝箞鐢ㄧ殑锛
鍦ㄧ粓绔涓杈揿叆gcc鏂囦欢钖-o鐩镙囨枃浠跺悕铹跺悗./鐩镙囨枃浠跺悕灏辫屼简锛屾病链夌洰镙囨枃浠跺悕锛岃嚜锷ㄥ瓨涓篴镓ц./a灏辫屼简銆傚湪浣跨敤Gcc缂栬疟鍣ㄧ殑镞跺欙纴鎴戜滑蹇呴’缁椤嚭涓绯诲垪蹇呰佺殑璋幂敤鍙傛暟鍜屾枃浠跺悕绉般侴CC缂栬疟鍣ㄧ殑璋幂敤鍙傛暟澶х害链100澶氢釜锛屽叾涓澶氭暟鍙傛暟鎴戜滑鍙鑳芥牴链灏辩敤𨱒庣儌涓嶅埌锛岃繖閲屽彧浠嬬粛鍏朵腑链锘烘湰銆佹渶甯哥敤镄勫弬鏁般侴CC链锘烘湰镄勭敤娉曟槸鈭秅cc鍏朵腑options灏辨槸缂栬疟鍣ㄦ墍闇瑕佺殑鍙傛暟锛宖ilenames缁椤嚭鐩稿叧镄勬枃浠跺悕绉般-c锛屽彧缂栬疟锛屼笉杩炴帴鎴愪负鍙镓ц屾枃浠讹纴缂栬疟鍣ㄥ彧鏄鐢辫緭鍏ョ殑.c绛夋簮浠g爜鏂囦欢鐢熸垚.o涓哄悗缂镄勭洰镙囨枃浠讹纴阃氩父鐢ㄤ簬缂栬疟涓嶅寘钖涓荤▼搴忕殑瀛愮▼搴忔枃浠躲-ooutput_filename锛岀‘瀹氲緭鍑烘枃浠剁殑钖岖О涓簅utput_filename锛屽悓镞惰繖涓钖岖О涓嶈兘鍜屾簮鏂囦欢钖屽悕銆傚傛灉涓岖粰鍑鸿繖涓阃夐”锛実cc灏辩粰鍑洪勮剧殑鍙镓ц屾枃浠禷.out銆-g锛屼骇鐢熺﹀彿璋冭瘯宸ュ叿(GNU镄刧db)镓蹇呰佺殑绗﹀彿璧勮锛岃佹兂瀵规簮浠g爜杩涜岃皟璇曪纴鎴戜滑灏卞繀椤诲姞鍏ヨ繖涓阃夐”銆-O锛屽圭▼搴忚繘琛屼紭鍖栫紪璇戙佽繛鎺ワ纴閲囩敤杩欎釜阃夐”锛屾暣涓婧愪唬镰佷细鍦ㄧ紪璇戙佽繛鎺ヨ繃绋嬩腑杩涜屼紭鍖栧勭悊锛岃繖镙蜂骇鐢熺殑鍙镓ц屾枃浠剁殑镓ц屾晥鐜囧彲浠ユ彁楂桡纴浣嗘槸锛岀紪璇戙佽繛鎺ョ殑阃熷害灏辩浉搴斿湴瑕佹参涓浜涖-O2锛屾瘆-O镟村ソ镄勪紭鍖栫紪璇戙佽繛鎺ワ纴褰撶劧鏁翠釜缂栬疟銆佽繛鎺ヨ繃绋嬩细镟存参銆-Idirname锛屽皢dirname镓鎸囧嚭镄勭洰褰曞姞鍏ュ埌绋嫔簭澶存枃浠剁洰褰曞垪琛ㄤ腑锛屾槸鍦ㄩ勭紪璇戣繃绋嬩腑浣跨敤镄勫弬鏁般侰绋嫔簭涓镄勫ご鏂囦欢鍖呭惈涓ょ嶆儏鍐碘埗A)#includemyinc.h>B)#include钬渕yinc.h钬濆叾涓锛孉绫讳娇鐢ㄥ皷𨰾鍙(>)锛孊绫讳娇鐢ㄥ弻寮曞彿(钬溾)銆傚逛簬A绫伙纴棰勫勭悊绋嫔簭cpp鍦ㄧ郴缁熼勮惧寘钖鏂囦欢鐩褰(濡/usr/include)涓鎼滃荤浉搴旂殑鏂囦欢锛岃孊绫伙纴棰勫勭悊绋嫔簭鍦ㄧ洰镙囨枃浠剁殑鏂囦欢澶瑰唴鎼灭储鐩稿簲鏂囦欢銆侴CC镓ц岃繃绋嬬ず渚嬬ず渚嬩唬镰乤.c锛#includestdio.h>intmain(){printf("hellon");}棰勭紪璇戣繃绋嬶细杩欎釜杩囩▼澶勭悊瀹忓畾涔夊拰include锛屽苟锅氲娉曟镆ャ傚彲浠ョ湅鍒伴勭紪璇戝悗锛屼唬镰佷粠5琛屾墿灞曞埌浜910琛屻俫cc-Ea.c-oa.icata.c|wc-l5cata.i|wc-l910缂栬疟杩囩▼锛氲繖涓阒舵碉纴鐢熸垚姹囩紪浠g爜銆俫cc-Sa.i-oa.scata.s|wc-l59姹囩紪杩囩▼锛氲繖涓阒舵碉纴鐢熸垚鐩镙囦唬镰併傛よ繃绋嬬敓鎴怑LF镙煎纺镄勭洰镙囦唬镰併俫cc-ca.s-oa.ofilea.oa.o:ELF64-bitLSBrelocatable,AMDx86-64,version1(SYSV),notstripped阈炬帴杩囩▼锛氶摼鎺ヨ繃绋嬨傜敓鎴愬彲镓ц屼唬镰併傞摼鎺ュ垎涓轰袱绉嶏纴涓绉嶆槸闱欐侀摼鎺ワ纴鍙﹀栦竴绉嶆槸锷ㄦ侀摼鎺ャ备娇鐢ㄩ润镐侀摼鎺ョ殑濂藉勬槸锛屼緷璧栫殑锷ㄦ侀摼鎺ュ簱杈冨皯锛屽瑰姩镐侀摼鎺ュ簱镄勭増链涓崭细寰堟晱镒燂纴鍏锋湁杈冨ソ镄勫吋瀹规э绂缂虹偣鏄鐢熸垚镄勭▼搴忔瘆杈冨ぇ銆备娇鐢ㄥ姩镐侀摼鎺ョ殑濂藉勬槸锛岀敓鎴愮殑绋嫔簭姣旇缉灏忥纴鍗犵敤杈冨皯镄勫唴瀛樸俫cca.o-oa绋嫔簭杩愯岋细./ahello缂栬緫链娈礕CC缂栬疟绠鍗曚緥瀛愮紪鍐椤备笅浠g爜锛#includestdio.h>intmain(){printf("hello,world!n");}镓ц屾儏鍐靛备笅锛欢cc-Ehello.c-ohello.igcc-Shello.i-ohello.sgcc-chello.s-ohello.ogcchello.c-ohello./hellohello,world!
linux涓嬫庝箞瀹夎単cc锛
1銆佸湪Linux鐜澧冧笅鍙瑕佽兘阈炬帴Internet灏卞彲浠ラ氲繃链鍦扮殑yum婧愭潵瀹夎咃纴鍦ㄧ粓绔涓嬭緭鍏yuminstallgcc灏卞彲浠
2銆乴inux鍐呮牳镊甯︿简杩欎簺纭浠剁殑椹卞姩锛屾棤椤讳笅杞藉畨瑁呯殑
3銆佷綘鐢ㄧ殑鏄铏氭嫙链猴纴鍙瑕佸湪瀹夎卨inux镄勬椂鍊栾惧畾濂戒互妗ヨ繛镄勬柟寮忓叡浜献nternet灏卞彲浠ヤ笂缃戠殑
4銆佽繖涓杩樻病璇曡繃銆备綘鍙浠ユ悳绱涓涓嬭櫄𨰾熸満涓庢湰鍦版枃浠跺叡浜鐩稿叧镄勫叧阌瀛楄瘯涓璇
5銆佽繖涓鍙鏄涓犸arning锛屼笉鏄痚rror锛岀郴缁熷凡缁忔彁绀轰綘鍙浠ヤ互瓒呯骇鐢ㄦ埛锛堢浉褰扑簬windows涓嬬殑绠$悊锻樻潈闄愶级镄勬槸韬浠界橱闄嗕简锛岃屼笖杩樿佽惧畾瀵嗙爜
杩樻湁浠涔堢枒闂锛屽挶浠鍐嶈ㄨ
鍦╨inux涓锛屾庝箞鐢╣cc缂栬疟鏂囦欢锛
缂栬疟钥佷憨鏂规硶锛氭牸寮廹cc甯哥敤镄勯夐”链绠鍗旷殑鏄:gcchello.c榛樿ょ殑𨱍呭喌涓嫔皢鐢熸垚a.out镄勫彲镓ц屾ф枃浠讹纴鍙闇瑕佸湪缁堢涓婅緭鍏./a.out灏卞彲浠ョ湅鍒版墽琛岀殑缁撴灉锛屽傛灉浣犳兂鎸囧畾鐢熸垚鐩镙囨枃浠剁殑钖嶅瓧闾d箞浣犲彲渚嶆𡒄妫浠ュ姞涓-o阃夐”,锻戒护濡备笅:gcc-ohellohello.c锻戒护锛欢cc-chellohello.c
镓╁𪾢璧勬枡锛
gcc锻戒护镄勫熀链鐢ㄦ硶gcc鍏朵腑锛宖ilenames涓烘枃浠跺悕锛沷ptions涓虹紪璇戦夐”銆傚綋涓崭娇鐢ㄤ换浣旷紪璇戦夐”缂栬疟hello.c镞讹纴gcc灏嗕细镊锷ㄧ紪璇戜骇鐢熶竴涓猘.out镄勫彲镓ц屾枃浠讹细#lshello.c#gcchello.c#lsa.outhello.c镓ц岋细#./a.outHello,World!浣跨敤-o缂栬疟阃夋嫨锛屽彲浠ヤ负缂栬疟钖庣殑鏂囦欢鎸囧畾涓涓钖嶅瓧锛#lsa.outhello.c#gcchello.c-ohello#lsa.outhellohello.c镓ц岋细#./helloHello,World!娉ㄦ剰锛氢娇鐢-o阃夐”镞讹纴-o钖庨溃蹇呴’璺熶竴涓鏂囦欢钖嶏纴鍗筹细-ooutfile銆备负浜嗕究浜庢弿杩板悗闱㈢殑阃夐”锛屽垹闄hello鍜宎.out鍙镓ц屾枃浠躲瀹夎卨inux镞跺备綍瀹夎匞CC锛
浣犲彲鍦ㄤ綘镄勫厜鐩树笂镓撅纴链変竴涓狦CC鍖呭拰4涓渚濊禆鏂囦欢锛欢libc-devel-2.3.4-2.13.i386.rpmcpp-3.4.4-2.i386.rpmglibc-kernheaders-2.4-9.1.98.EL.i386.rpmglibc-headers-2.3.4-2.13.i386.rpmgcc-3.4.4-2.i386.rpm濡傛病链夌殑璇濓纴鍙浠ョ敤缃戜笂镊锷ㄦ洿鏂扮殑鏂瑰纺瀹夎咃纴濡俧edora镄勮瘽鍙鐢▂uminstallgcc杩欐浔锻戒护镊锷ㄥ畨瑁呫
3. 在Linux下用C语言编程
4。守护进程的创建
如果你在DOS时代编写过程序,那么你也许知道在DOS下为了编写一个常驻内存的程序我们要编写多少代码了.相反如果在Linux下编写一个"常驻内存"的程序却是很容易的.我们只要几行代码就可以做到. 实际上由于Linux是多任务操作系统,我们就是不编写代码也可以把一个程序放到后台去执行的.我们只要在命令后面加上&符号SHELL就会把我们的程序放到后台去运行的. 这里我们"开发"一个后台检查邮件的程序.这个程序每个一个指定的时间回去检查我们的邮箱,如果发现我们有邮件了,会不断的报警(通过机箱上的小喇叭来发出声音). 后面有这个函数的加强版本加强版本
后台进程的创建思想: 首先父进程创建一个子进程.然后子进程杀死父进程(是不是很无情?). 信号处理所有的工作由子进程来处理.
#include
#include
#include
#include
#include
#include
#include
/* Linux 的默任个人的邮箱地址是 /var/spool/mail/用户的登录名 */
#define MAIL "/var/spool/mail/hoyt"
/* 睡眠10秒钟 */
#define SLEEP_TIME 10
main(void)
{
pid_t child;
if((child=fork())==-1)
{
printf("Fork Error:%s\n",strerror(errno));
exit(1);
}
else if(child>0)
while(1);
if(kill(getppid(),SIGTERM)==-1)
{
printf("Kill Parent Error:%s\n",strerror(errno));
exit(1);
}
{
int mailfd;
while(1)
{
if((mailfd=open(MAIL,O_RDONLY))!=-1)
{
fprintf(stderr,"%s","\007");
close(mailfd);
}
sleep(SLEEP_TIME);
}
}
}
你可以在默认的路径下创建你的邮箱文件,然后测试一下这个程序.当然这个程序还有很多地方要改善的.我们后面会对这个小程序改善的,再看我的改善之前你可以尝试自己改善一下.比如让用户指定邮相的路径和睡眠时间等等.相信自己可以做到的.动手吧,勇敢的探险者.
好了进程一节的内容我们就先学到这里了.进程是一个非常重要的概念,许多的程序都会用子进程.创建一个子进程是每一个程序员的基本要求!
4. Linux环境下C开发_linux搭建c语言开发环境
一:C语言嵌入式Linux工程师的学习需要具备一定的C语言基础,C语言是嵌入式领域最重要也是最主要的编程语言,通过大量编程实例重点理解C语言的基础编程以及高级编程知识。包括:基本数据类型、数组、指针、结构体、链表、文件操作、队列、栈等。
二:Linux基础Linux操作系统的概念、安装方法,详细了解Linux下的目录结构、基本命令、编辑器VI,编译器GCC,调试器GDB和Make项目管理工具,ShellMakefile脚本编写等知识,嵌入式开发环境的搭建。
三:Linux系统编程重点学习标准I/O库,Linux多任务编程中的多进程和多线程,以及进程间通信(pipe、FIFO、消息队列、共享内存、signal、信号量等),同步与互斥对共享资源访问控制等重要知识,主要提升对Linux应用开发的理解和代码调试的能力。
四:Linux网络编程计算机网络在嵌入式Linux系统应用开发过程中使用非常广泛,通过Linux网络发展、TCP/IP协议、socket编程、TCP网络编程、UDP网络编程、Web编程开发等方面入手,全面了解Linux网络应用程序开发。重点学习网络编程相关API,熟练掌握TCP协议服务器的编程方法和并发服务器的实现,了解HTTP协议及其实现方法,熟悉UDP广播、多播的原理及编程方法,掌握混合C/S架构网络通信系统的设计,熟悉HTML,Javascript等Web编程技术及实现方法。
五:数据结构与算法数据结构及算法在嵌入式底层驱动、通信协议、及各种引擎开发中会得到大量应用,对其掌握的好坏直接影响程序的效率、简洁及健壮旅瞎性。此阶段的学习要重点理解数据结构与算法的基础内容,包括顺序表、链表、队列、栈、树、图、哈希表、各种查找排序算法等应用及其C语言实现过程。
六:C、QTC是Linux应用开发主要语言之一,本阶段重点掌握面向对象编程的基本思想以及C的重要内容。图形界面编程是嵌入式开发中非常重要的一个环节。由于QT具有跨平台、面向对象、丰富API、支持2D/3D渲染、支持XML、多国语等强大功能,在嵌入式领域的GUI开发中得到了广范的应用,在本阶段通过基于QT图形库的学习使学员可以熟练编写GUI程序,并移植QT应用程序到Cortex-A8平台。包括IDE使用、QT部件及布局管理器、信息与槽机制的应用、鼠标、键盘及绘图事件处理及文件处理的应用。
七:CortexA8、Linux平台开发通过基于ARMCortex-A8处理s5pv210了解芯片手册的基本阅读技巧,掌握s5pv210系统资源、时钟控制器、电源管理、异常中断控制器、nandflash控制器等模块,为底层平台搭建做好准备。Linux平台包括内核裁减、内核移植、交叉编译、GNU工具使用、内核调试、Bootloader介绍、制作与原理分析、根文件系统制作以及向内核中添加自己的模块,并在s5pv210实验平台上运行自己制作的Linux系统,集成部署Linux系统整个流程。同时了解Android操作系统开发流程。Android系统是基于Linux平台的开源操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的移动软件,目前它的应用不再局限于移动终端,还包括数据电视、机顶盒、PDA等消费类电子产品。
八:驱动开发拆颤空驱动程序设计是嵌入式Linux开发工作中重要的一部分,也是比较困难的一部分。本阶洞租段的学习要熟悉Linux的内核机制、驱动程序与用户级应用程序的接口,掌握系统对设备的并发操作。熟悉所开发硬件的工作原理,具备ARM硬件接口的基础知识,熟悉ARMCortex-A8处理器s5pv210各资源、掌握Linux设备驱动原理框架,熟悉工程中常见Linux高级字符设备、块设备、网络设备、USB设备等驱动开发,在工作中能独立胜任底层驱动开发。
以上就是列出的关于一名合格嵌入式Linux开发工程师所必学的理论知识,其实,作为一个嵌入式开发人员,专业知识和项目经验同样重要,所以在我们的理论学习中也要有一定的项目实践,锻炼自己的项目开发能力。