linux的程序在哪里写_linux怎么写个程序调用其他程序 - CSDN
  • 二:编译源码:在linux环境下,用对应的toolchain 编译源码,生成应用程序的可执行文件 keyFunction 例如:# arm-none-linux-gnueabi-gcc -o keyFunction keyFunction.c 三:添加应用程序keyFunction到

    步骤如下:

    一:编写源码:本文末尾是我自己编写的一个简单的按键应用程序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 <stdio.h>

    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/ioctl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h> /*文件控制*/
    #include <sys/select.h>
    #include <sys/time.h> /*时间方面的函数*/
    #include <errno.h> /*有关错误方面的宏*/
    #include <sys/poll.h> //poll()
    #include <fcntl.h>
    #include <string.h> //memset()
    #include <linux/input.h> 


    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;
    }
    展开全文
  • 我们知道windows下编译并执行c++程序,只需要一个合适的集编辑,编译,连接执行为一体的多功能软件就可以完成整个过程。国内用的比较多的软件有visual ... 类比于一个运行windows平台的c++应用程序li...

    我们知道在windows下编译并执行c++程序,只需要一个合适的集编辑,编译,连接执行为一体的多功能软件就可以完成整个过程。国内用的比较多的软件有visual studio(版本现已更新到2017)初学者也可以考虑visual c++6.0;本章我们主要讨论在如何linux系列操作系统中如何使用shell进行c++程序的编写以及执行。
    类比于写一个运行在windows平台的c++应用程序,在linux终端下首先也要创建一个后缀名为.cpp的文件用来存放你的主要代码。
    使用touch命令touch test.cpp 再ls一下会看到你的文件夹里多了一个名为test.cpp的文件。
    vim test.cpp
    进入文件内编写你的代码程序

    #include<iostream>
      2 using namespace std;
      3 class Time{
      4 private:
      5     int hour;
      6     int minute;
      7     int second;
      8 public:
      9     void set(int h,int m,int s);
     10     void print();
     11 };
     12 void Time::set(int h,int m,int s)
     13     { hour=h;minute=m;second=s;}
     14 void Time::print()
     15     {cout<<hour<<"/"<<minute<<"/"<<second<<endl;}
     16 int main()
     17 {   Time a,b;
     18     a.set(10,12,50);
     19     a.print();
     20     b.set(12,10,40);
     21     b.print();
     22     return 0;
     23 }

    保存退出

    使用gcc编译你所写的程序gcc test.cpp 这个时候系统会默认生成一个名为a.out的文件在你的当前目录下。若想指定一个你所喜欢的文件名可以使用-o

    gcc test.cpp -o 后面加你想生成的文件名。

    如果编译通过的话证明你所写的程序是没有bug的

    运行一下 ./a.out

    ok.

    展开全文
  • 说到第一个linux内核驱动程序,再简单不过了。以前也过,这次将做一个图形化的整理。我这里以我的开发环境tiny4412为主,我将这上面第一个驱动程序。首先,我driver/目录下创建yangyx目录,目录下新建一...

    说到写第一个linux内核驱动程序,再简单不过了。以前也写过,这次将做一个图形化的整理。

    我这里以我的开发环境tiny4412为主,我将在这上面写第一个驱动程序。

    首先,我在driver/目录下创建yangyx目录,

    在目录下新建一个hello.c和一个Makefile


    hello.c内容如下:

    hello.c包含的头文件就类似咱们写标准C一样的头文件。

    驱动程序__init ,加上这个,程序在编译的过程中会标识__init段,以此对程序进行优化处理,在这里我们实现了一个打印语句。


    Makefile内容如下:


    然后,回到上一级,也就是driver目录下,打开driver目录下的Makefile

    添加该目录的信息:obj-y  yangyx/

    注意这里一定要加 / 


    然后回到kernel主目录,执行make

    编译中最顶层Makefile会根据Makefile编译体系包含我们在driver目录下和yangyx目录下的Makefile,实现级联编译。


    编译完成后在yangyx目录下会生成:


    我们就可以将以下的zImage下载到开发板上去看是否已经加载了这个驱动程序:



    程序我已经验证过了,这里就不再验证,其它平台也是雷同。


    展开全文
  • Linux应用程序通常存放系统为之保留的特定目录中。系统为正常使用提供的程序,包括用于程序开发的工具,都可目录/usr/bin中找到;系统管理员为某个特定的主机或本地网络添加的程序通常可目录/usr/local/bin或/...
    Linux应用程序通常存放在系统为之保留的特定目录中。系统为正常使用提供的程序,包括用于程序开发的工具,都可在目录/usr/bin中找到;系统管理员为某个特定的主机或本地网络添加的程序通常可在目录/usr/local/bin或/opt中找到。
    系统管理员一般喜欢使用/opt和/usr/local目录,因为它们分离了厂商提供及后续添加的文件与系统本身提供的应用程序。一直保持以这种方式组织文件的好处在你需要升级操作系统时就可以看出来了,因为只有目录/opt和/usr/local里的内容需要保留。
    我们建议对于系统级的应用程序,你可以将它放在/usr/local目录中来运行和访问所需的文件。对于开发用和个人的应用程序,最好在你的家目录中使用一个文件夹来存放它。

    ——摘自《Linux程序设计》


    /proc目录包含了一些系统信息,驱动信息,内核信息

    例如/proc/cpuinfo给出cpu信息


    展开全文
  • [TOC]为什么要这一篇博客因大一上学期老师要求而开始使用linux系统编写c程序,而linux编写的模式与windows差别很大,所以此文章记录自己的学习历程,也能为初学者提供帮助 (本博客我学习linux过程将持续更新...

    目录
    [TOC]

    为什么要写这一篇博客

    因大一上学期老师要求而开始使用linux系统编写c程序,而linux编写的模式与windows差别很大,所以写此文章记录自己的学习历程,也能为初学者提供帮助
    (本博客在我学习linux过程将持续更新)1
    

    如何打开终端

    1)按下快捷键打开终端: Ctrl+Alt+T 
    2)从左侧工具栏中打开终端。
    

    终端里的常见命令及作用

    1.cd 
    cd指返回当前目录: 
    如cd Desktop/program 便是指返回到Desktop(桌面)的program 文件夹; 
    2.gedit 
    gedit指打开某文件或创建某文件,相当于windows的记事本,当所在目录没有该文件时,就会重新创建该文件,倘若有,则file直接打开该文件; 
    如gedit Isprimer.c 便指打开或创建Isprimer.c的文件 
    3.gcc 
    gcc是编译器,其格式为gcc [options][filenames],即gcc编译器根据输入的选 
    择命令对文件进行相应处理。 
    gcc 文件 指生成可执行文件 
    gcc -g 文件 -g的作用是在进行gdb调试时调出代码 
    gcc -o 文件名 文件 修改文件的名称 
    -std = c99 有些格式如for(int i = 1; i < 5; i++)在for循环中定义变量,就要参考c99标准 
    -lm sqrt函数无法编译成功,在编译指令补上-lm (特殊函数就需要加上)
    4.“./” 
    ./指当前目录,./ 文件指执行当前目录下文件 。/.a.out 表示执行a.out可执行文件 
    5.gdb 
    gdb指gdb调试 
    1.输入file 文件,表示gdb调试的对象; 
    2.输入l,显示出程序的代码; 
    3.输入b n(数字) 表示设置的断点位置; 
    4.输入r表示调试开始; 
    5.输入s或n(字母)表示进入下一步; 
    6.输入p 变量名可查看该变量的数值; 
    7.输入q 退出gdb调试。
    

    4.使用终端编写C语言

        以编写helloworld程序为例。 
        1.用ctrl+alt+T来打开终端
        2.要在某个文件夹里创建文本,首先要回到该文件夹的目录。如我在桌面(desktop)建立文本。 (在终端中输入) 
        cd Desktop //然后按下回车 
        3.创建文件夹(此步骤可跳过,但建议创建)
        mkdir 文件名
        4.建立文本 
        gedit hello world.c //然后按下回车,会跳出一个类似于windows的记事本 
        5.往里面敲代码 
        C 
        # include <stdio.h> 
        int main(void) { 
        printf("hello world!"); 
        return 0; 
        } 
    
        6.保存代码,关闭文本框。
        按esc,再输入:wq(一开始看不到尽管输进去,wq为保存并关闭,也可为w则为保存不关闭) 
        7.启动gcc对代码进行编译。 
        gcc helloworld.c -o execFile(此步骤会生成一个execFlie的文件,可用ls查看)
        8.如果有错误,系统会提示,按方向键找回gedit helloworld.c 的指令,按下回车,弹出文本框后根据系统提示对代码进行修改,完成后记得保存,
        关闭文本框。 
        9.运行
        ./execFlie则会开始运行
        7.如果要进行调试,请参考我的第三部分:“有关编写C语言的指令”。
    

    5.如何在linux中切换中英文版本

    以英文改为中文为例
    首先在 设置(settings)那里有个 语言支持 (language support)中安装 添加语言 中添加中文简体,再在 设置 中的 用户账户 中 解锁(unlock)并改变语言,最后重启。
    

    6.vmware tools安装

    ①先说说这个工具有什么用把:真机与vm鼠标自由切换,移动流畅;显示效果更加的好;支持拖拽即复制粘贴
    ②这两个网站已经很详细了,也回答了一些常见问题的解决方法,如果还是有问题请自行查资料或问。
    虚拟机怎么安装vmware tools
    ubuntu安装vwmare tools

    7.vim的使用

    1.安装vim

    在终端中直接输入sudo apt install vim(也有说是apt-get install vim的,没有试过)
    之后再根据提示输入密码(看不到的,盲输)和Y
    

    2.vim指南

    ①在终端中直接输入vimtutor
    建议在中文版下看,英语大神忽略
    ②自己上网查
    

    3.vim配置

    ①在命令行下,输入命令:sudo vim /etc/vim/vimrc
    必须加上sudo,否则你是没有权限编辑vimrc的。
    ②如果打开的是这个就是正确的

    常用配置

    然后在最后面直接添加你想添加的配置,下面是一些常用的(不建议直接复制这个货网上的,要理解每个的含义及有什么用,根据自己需要来调整)
    set number ” 显示行号
    set nobackup “覆盖文件时不备份
    set cursorline “突出显示当前行
    set ruler “在右下角显示光标位置的状态行
    set shiftwidth=4 ” 设定 > 命令移动时的宽度为 4
    set softtabstop=4 ” 使得按退格键时可以一次删掉 4 个空格
    set tabstop=4 ” 设定 tab 长度为 4(可以改)
    set smartindent ” 开启新行时使用智能自动缩进
    set ignorecase smartcase ” 搜索时忽略大小写,但在有一个或以上大写字母时仍 保持对大小写敏感
    下面这个没觉得很有用,在代码多的时候会比较好
    ” set showmatch ” 插入括号时,短暂地跳转到匹配的对应括号
    ” set matchtime=2 ” 短暂跳转到匹配括号的时间

    还不清楚有什么用的配置:

    set guioptions-=T ” 隐藏工具栏
    set guioptions-=m ” 隐藏菜单栏
    set nocompatible ” 关闭 vi 兼容模式
    set backspace=indent,eol,start
    ” 不设定在插入状态无法用退格键和 Delete 键删除回车符
    set cmdheight=1 ” 设定命令行的行数为 1
    set laststatus=2 ” 显示状态栏 (默认值为 1, 无法显示状态栏)
    set statusline=\ % @=((foldclosed(line(‘.’))
    ” 用空格键来开关折叠
    colorscheme molokai ” 设定配色方案
    set autochdir ” 自动切换当前目录为当前文件所在的目录
    filetype plugin indent on ” 开启插件
    set backupcopy=yes ” 设置备份时的行为为覆盖
    set hlsearch ” 搜索时高亮显示被找到的文本
    set magic ” 设置魔术
    set hidden ” 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存


    如果对以上观点有想法,欢迎交流。


    1. 本文部分内容摘自林威宏师兄博客林威宏师兄博客
    展开全文
  • 本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程。相信这样由浅入深、由具体实例到抽象理论的描述更容易初学者入手Linux驱动的大门。 ...
  • 在Linux系统里,需要熟练掌握Terminal里编写C语言程序,进行编译调试。本章主要介绍在Linux的终端下编写C程序并编译运行。一,编写C时需要掌握的一些Linux操作(1)文件管理相关的命令Linux命令名称作用使用举例...
  • 在linux编写shell程序并执行的步骤 简介 我是第一次博客,不知道应该有什么格式和注意事项,请大家多多指教。 今天是要讲讲怎样在linux命令行环境下创建一个脚本程序并运行的。 这对于稍有经验的人来说都不是事...
  •  可以说这个顺序代表了一般Linux程序猿的学习道路,《Linux程序设计》内容全面,易于入手,适用于新手详细了解Linux下编程,《Linux高级程序设计》则相当于前一本的基础上进行了高度抽象和概括,介绍了Linux下...
  • 由于自己并没有太多的linux下的工作经验,所以不考虑直接在linux平台下工作,开发。 好在现在VSCode,VisualStudio目前都支持跨平台开发。 VSCode有一套remote-xxx的扩展,可以本机linux子系统,远程主机,...
  • 问题背景我们做嵌入式开发时常需要从应用程序中读取某个GPIO端口,这些端口往往连接了其他的板子,或外设。 那么解决问题的办法有两种。驱动 编写一个linux驱动 加载到内核中 应用程序通过读取驱动生成的虚拟...
  • Linux下如何让自己的程序在开机时自动启动 2011-07-01 0 个评论  收藏 我要投稿 系统的服务开机时一般都可以自动启动,那我们程序自己程序呢?   windows系统“开始”——...
  • 在Linux下编译和执行程序文件
  • 他们说作为一名CS专业的学生你要会Linux,所以友人的推荐下我买了这本《Linux程序设计》,经过一段时间对Linux的学习和阅读,已经入坑Linux。下面是我的一点点分享。 有关Linux Linux内核最初只是由Linus ...
  • 我们知道windows下编译并执行c++程序,只需要一个合适的集编辑,编译,...本章我们主要讨论如何linux系列操作系统中如何使用shell进行c++程序的编写以及执行。 类比于一个运行windows平台的c++应用程序
  • 对于linux新手来说,好不容易装了个软件,却发现不知道装在哪里了,找不到,甚至卸载都很费劲,总结了一下路径问题汇总:Linux中查看某 个软件的安装路径(地址)有时显得非常重要。比如某个文件的快速启动项被删除,...
  • 最近开始学习linux编程,对于linux的命令,却还不特别熟悉,此记录一下,学习linux的一些命令首先ctrl+alt+t打开终端,然后使用vim进行编程 vim hello.c hello.c中 按下 i 或者 insert 输入以下内容输入完成后...
  • 一般在linux下设备分为字符设备和块设备。字符设备是指设备发送和接收数据以字符的形式进行;而块设备则以整个数据缓冲区的形式进行。在linux下对任何的操作可以看成是对设备的操作。简单而言之,可以是看成对设备...
  • 本篇文章基于教程目的,主要描述Linux的发展历程以及Linux虚拟机搭建、运行方式。 正文: 现在越来越多IT行业公司要求熟练使用Linux平台下的编程技术,因为目前大部分主机使用Linux相关系统(Linux称为内核更确切一些...
  • 1、进入Linux系统后,启动一个shell命令终端,类似Windows的cmd命令窗口方法:如果是这种虚拟机下的Linux的话,直接右击,选择“打开终端”即可进入shell命令终端如果不是,试一下,Ubuntu的三键启动终端方法,即...
1 2 3 4 5 ... 20
收藏数 796,432
精华内容 318,572
关键字:

linux的程序在哪里写