如何写程序linux,linux 下如何编写一个完整的应用程序!

步骤如下:

一:编写源码:本文末尾是我自己编写的一个简单的按键应用程序keyFunction.c

二:编译源码:在Linux环境下,用对应的toolchain 编译源码,生成应用程序的可执行文件 keyFunction

例如:# arm-none-linux-gnueabi-gcc -okeyFunction keyFunction.c

三:添加应用程序keyFunction到文件系统:

linux系统在启动时,会自动调用并执行脚本 /etc/init.d/rc.local,因此当我们的应用需要一开机就自动运行的话,就可以直接在文件系统的rc.local 中添加指令如下:

####################     rc.local    ###############

#!/bin/sh

echo "local service: telnetd start"

telnetd

/etc/jffs2/service.sh &

/opt/./keyFunction &

#echo "Samba start"

#nmbd -D

#smbd -D

#############################################

上面红色部分就是添加的我自己的应用程序,注意:指令格式,及应用程序所在的目录一定要正确,否则应用不能运行!

如果应用程序不需要开机就运行,那就可以将keyFunction放在文件系统的任意目录中,比如 /opt/ ,   /usr/bin/ 等,然后在需要运行keyFunction的时候,由其它的应用程序通过系统调用来执行,此时不需要在rc.local 中添加任何指令。假设keyFunction

/opt/目录中,那么可以用下面的方法启动keyFunction

system("/opt/./keyFunction &");

其中‘&’ 表示在后台运行。

结束!

###################################      keyFunction.c    ######################

#include

#include

#include

#include

#include

#include

#include /*文件控制*/

#include

#include /*时间方面的函数*/

#include /*有关错误方面的宏*/

#include //poll()

#include

#include //memset()

#include

int main(void)

{

int fd,ret;

struct pollfd event;                                                         //创建一个struct pollfd结构体变量,存放文件描述符、要等待发生的事件

struct input_event key_value;

while(1)

{

fd=open("/dev/input/event1",O_RDWR);

if(fd<0)

{

perror("open  error!\n");

exit(1);

}

//poll结束后struct pollfd结构体变量的内容被全部清零,需要再次设置

memset(&event,0,sizeof(event));                       //memst函数对对象的内容设置为同一值

event.fd=fd;                                                             //存放打开的文件描述符

event.events=POLLIN;                                         //存放要等待发生的事件

ret=poll((struct pollfd *)&event,1,5000);            //监测event,一个对象,等待5000毫秒后超时,-1为无限等待

//判断poll的返回值,负数是出错,0是设定的时间超时,整数表示等待的时间发生

if(ret<0)

{

printf("poll error!\n");

exit(1);

}

if(ret==0)

{

//printf("Time out!\n");

continue;

}

if(event.revents&POLLERR)

{                                                                                     //revents是由内核记录的实际发生的事件,events是进程等待的事件

printf("Device error!\n");

exit(1);

}

if(event.revents&POLLIN)

{    //key_value=0;

ret=read(fd,&key_value,sizeof(key_value));

if(key_value.value==0)//此处判断按键是否松开

{

switch(key_value.code)//驱动input 上来的真正的按键值

{

case KEY_MENU:

printf("press----KEY_MENU     mplayer\n");

system("mount /dev/mmcblk0p1 /mnt/");//system 是系统调用函数,可直接执行文件系统中的任何其他应用程序。

system("/opt/./mplayer -n /mnt/wenbie.mp4 &");//此处调用/opt/ 下的应用程序 ./mplayer  并播放视频文件wenbie.mp4 , '&' 表示在后台运行。

break;

case KEY_UP:

printf("press----KEY_UP     preview\n");

system("mount /dev/mmcblk0p1 /mnt/");

system("/opt/./preview");

break;

case KEY_DOWN:

printf("press----KEY_DOWN    audiorec\n");

system("mount /dev/mmcblk0p1 /mnt/");

system("/opt/./audiorec -p /mnt -a 2 -t 120");

break;

default:

break;

}

}

}

close(fd);

}

return 0;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值