精华内容
下载资源
问答
  • Linux读取shell命令返回的数据 Linux下编写代码时,有时候需要实现的功能已经有shell命令实现了,我们大可不必自己花费精力去实现这部分功能,直接在函数中调用shell命令并且获取到返回的数据,接下来就可以为所欲为...

    Linux读取shell命令返回的数据

    Linux下编写代码时,有时候需要实现的功能已经有shell命令实现了,我们大可不必自己花费精力去实现这部分功能,直接在函数中调用shell命令并且获取到返回的数据,接下来就可以为所欲为了。

    代码

    /*read linux shell return data*/
    /*author: LK*/
    #define CMD_1	"ifconfig"
    void read_cmd(char * cmd)
    {
    	FILE *stream;
    	//FILE *wstream;
    	char buf[1024];
    	
    	memset(buf, '\0', sizeof(buf));
    	stream = popen(cmd, "r");
    	//wstream = fopen("test_popen.txt", "w+");
    	fread(buf, sizeof(char), sizeof(buf), stream);
    	//fwrite(buf, 1, sizeof(buf), wstream);
    	pclose(stream);
    	//fclose(wstream);
    	printf("%s\n", buf);
    }
    
    int main(void)
    {
    	read_cmd(CMD_2);
    	return 0;
    }
    

    上述代码注释掉的内容为将读取到的数据写入文件。如果读取到的数据太长,可以将数组容量扩大,或者用其他办法。

    展开全文
  • Linux读取串口数据

    万次阅读 2017-06-05 08:16:35
    最近项目中需要在Linux系统下读取串口数据,由于使用的Ubantu系统,开发工具是Qt Creator,所以首先在网上百度了一下,找到了几篇博客,大致内容上都差不多。由于使用的Qt4,其没有自带的串口类(Qt5就自带了串口类...

    一、前言

        最近项目中需要在Linux系统下读取串口数据,由于使用的Ubantu系统,开发工具是Qt Creator,所以首先在网上百度了一下,找到了几篇博客,大致内容上都差不多。由于使用的Qt4,其没有自带的串口类(Qt5就自带了串口类了,可以直接使用),Qt的强大就在于它的开源性和跨平台型,针对Qt4在Linux下的串口程序,网上有一个第三方库,即qextseriaport类,单大多数博友写的关于qextseriaport类的使用都是针对Windows平台的,既然Qt是跨平台的,那么qextseriaport也肯定是支持Linux平台的,在网上找了一下,找到一个针对Linux系统下应用qextseriaport的博文,基于linux (fedora 17)的QT串口通信实例,本文主要是针对这篇文章,根据在实验过程中出现的一些问题的总结,进一步详细说明在Linux系统下使用qextseriaport类,进行串口数据读取。


    二、问题背景

        大致为:有一个发送端周期性的往本机串口上发送数据,本机需要定时读取串口数据,解析,获取自己想要的信息。实际描述为:由于是做智能驾驶的,需要读取车辆速度,通过OBD设备读取并解析车辆速度,然后通过蓝牙发送给PC串口(也是通过一个蓝牙模块接收),PC端串口定时接收串口数据并解析。

        在上述过程中,有一个问题需要注意:发送方是周期性的不停的发送数据,也就是说PC机串口一直有数据进来,最常见的是发送端频率比接收端频率高,即准备读取串口数据时总可以读取的数据,但也也导致了另一个问题,那就是怎么处理接收端串口缓冲,因为你每次的读取操作都必须要把当前串口缓冲区中数据全部读取出来,不能只读一部分,不然发送端一直有数据进来,而你每次都不读玩,就会造成缓冲区溢出。


    三、串口的实质是什么

        但凡接触过Linux系统知识或者了解计算机系统原理,那你一定通过一句话“在任何操作系统下,一切都是文件”,Linux系统就是这句话的最完美的实现,即在Linux系统下,你完全可以把所有东西当成是一个文件、即所有东西都可以按照“打开——设置——读写——关闭”的模式进行,同样,在Linux下串口也可以看成是一种文件(其实任何操作系统下都可以这样认为),你要读写串口数据,就必须先打开、设置串口,然后读写,读写完毕,就必须要关闭串口。


    四、Ubantu下Qt 串口数据读取程序

        首先,你可以先浏览一下基于linux (fedora 17)的QT串口通信实例,知道一个大致的流程,并按照要求下载qextseriaport源码,将相应文件拷贝到自己的工程目录下,就可以按照他说的编写代码了,其实他这个只是一个简单的demo,可以自己写一个稍微复杂一点的。

        看了他的代码之后,可能你已经大致明白了,他的操作流程完全是按照“打开——设置——读写——关闭”的操作模式来操作串口的,其“打开和设置”过程都是在MainWindow的构造函数里面进行的,“读取”操作其实就是一个函数readAll(),为了实现定时读取,需要与一个QTimer connect,其实你完全可以不用定时器(在他的说明里面说的是必须要用定时器)定时器的功能是什么?不就是定时触发其所关联的函数吗?其实质是你要定期调用readAll()函数,你完全可以自己控制这个定时操作,即可以在你的主函数里面周期性调用readAll()函数就行了,最常见的,如果你要一直度,就在while(1)循环里面调用readAll()函数,“关闭”操作是在MainWindow的析构函数里面调用的。

        由于我的Qt工程比较大,不是只有一两个编译模块,所以我是自己调用的readAll()函数,并没有与QTimer进行关联,因为我有一个主控程序(其实也就是mian函数啊),所以就在主控程序里面调用的readAll()函数,实现周期性的读取串口数据,我的读取车辆速度文件如下:

    ReadCarSpeed.h

    #ifndef READCARSPEED_H
    #define READCARSPEED_H
    
    void OpenCom();   //打开、设置串口
    
    void ReadSpeed();     //读取、解析数据,关闭操作也是在退出界面时调用
    #endif // READCARSPEED_H
    ReadCarSpeed.cpp

    #include "ReadCarSpeed.h"
    #include "posix_qextserialport.h"
    
    extern int carSpeed;
    Posix_QextSerialPort *myCom;
    
    void OpenCom()
    {
        //定义串口对象,并传递参数,在构造函数里对其进行初始化
        myCom = new Posix_QextSerialPort("/dev/ttyUSB1",QextSerialBase::Polling);
    
        myCom ->open(QIODevice::ReadWrite);     //以读写方式打开串口
    
        //设置串口参数
        myCom->setBaudRate(BAUD9600);     //波特率设置,我们设置为9600
        myCom->setDataBits(DATA_8);     //数据位设置,我们设置为8位数据位
        myCom->setParity(PAR_NONE);     //奇偶校验设置,我们设置为无校验
        myCom->setStopBits(STOP_1);     //停止位设置,我们设置为1位停止位
        myCom->setFlowControl(FLOW_OFF);     //数据流控制设置,我们设置为无数据流控制
        myCom->setTimeout(50);     //延时设置,设置为延时20ms
    }
    
    void ReadSpeed()
    {
        QByteArray temp = myCom->readAll();     //读取串口缓冲区的所有数据给临时变量temp
        //把临时变量temp转换成整型变量carSpeed
        QByteArray c = "KM/H";      //发送端发送的数据为“NKM/H”,其中N表示实际车速,由于发送端频率比接收端频率快,所以每次调用readAll()读取的数据中是多个连续的“NKM/H”字符串,形如“NKM/HNKM/HNKM/HNKM/HNKM/HNKM/HNKM/H”
    								//由于我需要的是最新的车辆速度,所以只需要当前读取字符串中最后一个速度字符子串,使用QByteArray的成员函数lastIndexOf就可以实现,其返回值是最后一个KM/H的位置,这属于C++字符串搜索知识点
    								//博友可以自行翻阅C++Primer(第五版P325)
        int index = temp.lastIndexOf(c);     //返回最后一个c匹配位置
        QByteArray speedstr = temp.mid(index-1,1);     //获取速度信息
    
        carSpeed = speedstr.toInt();    //转换为整型,赋值给全局变量carSpeed(是一个全局变量)
    }

    (1)打开串口:

        在ReadCarSpeed.cpp文件中,OpenCom()函数负责打开和设置串口,这里有一点需要啰嗦一下:myCom->setTimeout(50);延时设置函数,我这里设置的是50ms,对于这个延时,我的理解是本机串口的接收频率,注意这个接收频率是不同于你读取的频率的,这里的接收频率是本机串口缓冲区接收数据的延时,即没50ms就有一个数据进去接收缓冲区队列(要理解数据缓冲区实际就是一个队列,先进先出),而你读取的频率是你调用readAll()函数的频率,如我的读取频率就是主控程序的频率(大约为500ms),所以每次大约读取10个速度信息。

    (2)数据读取与解析:

        ReadSpeed()函数中首先是调用readAll()函数读取缓冲区中全部数据,然后解析数据,上面说过,每次读取操作大约读取了10个速度信息(或者更多),而我需要的是最新的车速信息,而缓冲区队列中最新的车速信息是队列中的最后一个速度,所以只提取QByteArray中的最后一个速度,这通过C++的字符搜索(匹配)实现,具体可以查阅C++Primer(第五版P325)。这里QByteArray就是一个字节数组,可以存储任何数据,它的用法可以查看Qt Assistant文档。

        总之,在我的应用中,首先是调用一次OpenCom函数,打开并设置串口,然后周期性的调用ReadSpeed函数(其实质就是周期性的调用readAll函数)就能读取最新的车速信息。






    展开全文
  • ubuntu linux读取U盘

    万次阅读 2017-09-22 21:20:40
    VMware虚拟机怎么连接U盘 | VMware读取U盘的设置方法转载地址:http://www.xitongcheng.com/jiaocheng/xtazjc_article_15126.html虚拟机VMware可以安装各种操作系统,部分用户需要在虚拟机中使用U盘Ubuntu读取U盘...

    VMware虚拟机怎么连接U盘 | VMware读取U盘的设置方法

    转载地址:http://www.xitongcheng.com/jiaocheng/xtazjc_article_15126.html

    虚拟机VMware可以安装各种操作系统,部分用户需要在虚拟机中使用U盘

    Ubuntu读取U盘方法:

    1、检测存储设备名称

    sudo fdisk –l
    

    如查看到设备名为sdb1

    2、挂载存储设备sdb1到挂载点/mnt目录

    sudo mount /dev/sdb1 /mnt
    

    3、访问/mnt

    cd /mnt 
    

    可以进行与Ubuntu端其他文件夹一样的操作了

    4、卸载/mnt

    sudo umount /mnt
    
    --注意--
    
        有的虚拟机U盘插上电脑ubuntu自动挂载到/media目录下,ubuntu桌面左侧快捷栏中出现U盘图标,这表明自动挂载了,可以直接通过点击图标打开。
    
    这时将不能再挂载到其他目录。
    直接cd /media也一样访问U盘内容

    —————————————————–但是,有时候——————————————————
    在主机插入U盘后,虚拟机中没有任何反应,那么VMware要怎么连接U盘呢?下面就设置VMware虚拟机读取U盘的方法

    Ubuntu端查看U盘方法:

    ubuntu linux终端查看虚拟机设备:

    sudo fdisk –l 
    

    一般会出现/dev/sdb1的设备,并显示出U盘内存。

    读取U盘失败解决办法方法:

    1、按下Win+R打开运行,输入services.msc,打开服务;

    2、将VMware USB Arbitration Service服务开启,并设置为自动启动;
    这里写图片描述

    3、打开VMware,点击已建立好的虚拟机,查看“USB控制器”是否存在;
    这里写图片描述

    4、如果没有,则点击“编辑虚拟机设置”—“添加”—“USB控制器”,返回主界面,点击USB控制器,勾选右侧窗口USB选项;(如果还是有任何其中一个勾选不上,呈灰色,重启虚拟机)
    这里写图片描述

    5、接着启动虚拟机,在主机上插入U盘;
    这里写图片描述

    6、点击虚拟机->可移动设备,选择“连接(断开与主机的连接)”,连接到虚拟机;
    这里写图片描述

    7、提示USB设备将要从主机拔出并连接到虚拟机,确定;

    8、在虚拟机中就可以识别U盘了,如果要拔出U盘,同样是点击右下角USB图标,选择断开连接。

    展开全文
  • linux 读取函数read

    千次阅读 2012-02-11 14:41:32
    名字  read 从一个文件描述符中读取 概要  #include  ssize_t read(int fd, void *buf, size_t count); ... read() 尝试从文件... 如果count是0,read()返回0并没有其他的结果。如果count比SSIZE_MAX大,则结
    名字
    
        read 从一个文件描述符中读取
    概要
        #include <unistd.h>
        ssize_t read(int fd, void *buf, size_t count);
    描述
        read() 尝试从文件描述符中读取多达count个字节到buf指向的缓冲里面。
        如果count是0,read()返回0并没有其他的结果。如果count比SSIZE_MAX大,则结果未指定
    返回值
        成功的话,返回读取的字节数(0意味着文件结束),文件位置要加上这个数。如果这个数比请求的字节数少这也并不是错误;这可能是因为例如实际上当前没有那么多字节可以读取,或者read函数被一个信号中断了。错误的话,返回-1,errno被正确的设置。这种情况下文件的位置是否改变未指定。
    错误值
        EAGAIN     文件描述符指向一个socket以外的文件,并被标志为非阻塞,read阻塞了。
        EAGAIN 或者 EWOULDBLOCK
        文件描述符指向socket并标识了非阻塞,read函数阻塞了。
        EBADF fd不是一个有效的描述符或者没有打开
        EFAULT buf超出了可用的地址空间
        EINTR 调用在数据被读之前被信号中断了。
        EINVAL fd附加到了一个不适合读取的对象上;或者文件被以O_DIRECT标志打开了,要不就是指定的缓冲地址/count/当前文件便宜没有恰当的对齐。
        EIO I/O错误。
        EISDIR fd指向了一个目录。
        在NFS文件系统,读取少量的数据将只在第一次更新时间戳,随后的调用可能不会这样做。这是大多数客户端属性缓存引起的,因为不是所有的NFS客户端把st_atime(最后文件的访问时间)更新到服务器,客户端从客户端的缓存完美的读取不会把st_atime更新到取服务器上因为有没有服务器端的读取。 UNIX语义可以获得通过禁用客户端属性缓存,但在大多数情况下,这将大大增加服务器的负载,降低性能。许多文件系统和磁盘被认为是够快以至于O_NONBLOCK的实现被认为是不必要的。因此,O_NONBLOCK可能无法使用在文件和/或磁盘上。
    展开全文
  • 今天和大家分享的是在工作中通过通过JSCH第三方链接linux执行相应命令,在等待读取返回结果流时阻塞,一直不返回,导致程序挂死的情况, 首先问题发生的原因,服务器大范围SSH版本升级导致 解决办法首先想到的就是...
  • linux shell 逐行读取文件行

    千次阅读 2015-07-28 10:48:45
    linux shell 读取文件行
  • linux读取按行读写文本文件

    千次阅读 2017-11-14 17:16:00
    50. *从配置文件的一行读出key或value,返回item指针   51. *line--从配置文件读出的一行   52. */   53. int   get_item_from_line( char   *line, struct   item_t *item)   54.{  ...
  • c语言读取文件信息 c语言读取文件信息 LINUX LINUX
  • linux串口通信 读取信息

    千次阅读 2019-04-03 10:20:46
    这两天需要做一个串口通信,用于接受外设传输来的信息,...循环读取。 代码如下: #include <iostream> /*串口相关的头文件*/ #include<stdio.h> /*标准输入输出定义*/ #include<stdlib.h> /*标...
  • Linux读取USB扫描枪数据

    千次阅读 2018-01-31 17:52:00
    1.USB扫描枪   USB接口的扫描枪相当于键盘...2.Linux读取数据 2.1扫描枪设备   USB扫描枪相当于一个键盘输入设备,Windows或者Linux下都集成相关驱动,或者免驱动。基于ARM下的Linux系统,接入扫描枪,在“/de
  • Linux C语言管道读取

    千次阅读 2019-02-11 00:15:05
    管道读取写端已经关闭的管道,当数据全部读完后,写端返回0 #include &lt;unistd.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int ...
  • Linux读取Ini文件类

    千次阅读 2018-01-22 18:38:51
    Linux读取Ini文件类 最近项目上有需要读取Ini文件 所谓Ini文件也就是文本文档 并且以 //注释1 /*注释2 [Section] Key1=aaa Key2=bbb 这种形式存在的文档 自己编写了一个类 比较使用 简单 可以跨平台读写INI文件 ...
  • linux串口数据读取方法

    千次阅读 2012-06-26 16:11:32
    linux串口数据读取方法  | Linux下的串口操作说简单也简单,说复杂也复杂。简单在于其读写调用与文件操作一致,使用方便。但是参数设置相对复杂,而且在一些操作上需要注意技巧。 在串口...
  • Linux内核读取磁盘序列号的问题

    千次阅读 2013-11-16 15:46:05
     Linux内核的块设备驱动有能力读取磁盘的序列号,这个数据存储在磁盘的控制芯片ROM里面。内核应该以怎样的形式将这个序列号呈现给调用者呢?我们ls一下这个目录:/dev/disk/by-idll /dev/disk/by-id/...lrwxrwxrwx ...
  • linux读取excel文件

    万次阅读 2018-08-02 17:26:58
     * @str: 返回内容  * @i:行  * @j:列  * @book excel操作对象  * @sheet 单元格对象  *返回: char*  *作者:xukai  *联系电话:13814066290  * */ char* getCellValue(char *sCont,int i,int j,...
  • 使用linux shell读取yaml文件

    千次阅读 2020-01-17 11:59:49
    Linux 安装python3.7.0 centos6/7,centos系统本身默认安装有python2.x(其实我是centos6.5,centos默认安装python2.6.6),版本x根据不同版本系统有所不同,可通过 python --V 或 python --version 查看系统自带的...
  • 使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址)、端口号、用户名及密码 hostname = "" port = 22 username = "" password...
  • linux读取串口数据,处理,保存

    千次阅读 2020-08-14 15:48:04
    文章目录一、下载串口工具二、编程读取串口数据并打印 一、下载串口工具 $ sudo apt-get install cutecom $ sudo cutecom 可以很方便的看到用的哪个串口,以及看到传输的数据 二、编程读取串口数据并打印 ...
  • Java远程实现Linux文件内容读取

    万次阅读 2018-06-07 19:03:56
    * java 远程读取linux文件 * @author zhaochong */ public class ShellUtil { private static JSch jsch; private static Session session; /**配置连接 * @param user * @param passwd * @param host...
  • linux下java读取文件名乱码

    千次阅读 2016-07-18 17:50:19
    一般在Windows机器上生成的文件名为GBK,通过ftp、CVS等方式传输到linux上,与linux的系统编码UTF-8不相符,这样就造成读取的文件名乱码,从而程序异常。 解决这个问题的最简单的做法,调整JAVA运行环境下的...
  • 原始代码中有awk和sed理解起来比较费劲: 【sed讲解】http://man.linuxde.net/sed ... 【网上博客都有读取,没有写入】 而且,读取功能为 `awk -F '=' '/‘$Section’/{a=1}a==1&&$...
  • linux-GPIO读取以及中断注册

    千次阅读 2019-03-30 20:05:15
    硬件对应 HOME→UART_RING→GPX1_1 BACK→SIM_DET→GPX1_2 SWITCH3→AP_SLEEP→GPC0_3...GPIO读取 步骤: 申请GPIOgpio_request(EXYNOS4_GPX1(1),"HOME"); 设置模式,输入模式s3c_gpio_cfgpin(EXYNOS4_GPX1(1)...
  • 用到串口读取数据,要求数据
  • epoll机制读取linux串口数据

    千次阅读 2016-06-14 10:04:43
    epoll和select相比,最大不同在于: 1epoll返回时已经明确的知道哪个sokcet fd发生了事件,不用再一个个比对。这样就提高了效率。 2select的FD_SETSIZE是有限止的,而epoll是没有限止的只与系统资源有关。
  • Linux 上Qt读取中文文件路径问题

    千次阅读 2017-05-12 16:55:07
    最近在搞跨平台的事,把一个应用程序,从Windows,移植到Linux,使用的是Qt。但是遇到一个问题,QFile::exists文件,老是返回false,我已经确定文件在目录下存在,后来是这么解决的。 1. 把cpp文件的编码,转成UTF-...
  • 背景:在linux读取文件内容,按照WIndows下的代码一直提示错误Segmentation fault (core dumped),最后发现linux读取是有区别的不能直接使用WIndows下的代码 实现代码如下 std::ifstream f(filename.c_str())...
  • 文章目录文件I/O操作函数文件夹操作相关系统调用Linux下用c程序读取树莓派DS18B20探测的温度 在写编程之前我们,我们先要了解文件I/O操作函数!我将介绍一下我们经常用到的几个函数, 文件I/O操作函数 一、open系统...
  • 获取linux命令返回, 并通过正则表达式过滤字符串 在linux下可用. #include <regex.h>
  • read函数非阻塞读取会立即返回。 阻塞读取通过设置也可在没有数据时立即返回 #include <termios.h> struct termios tio; tio.c_cc[VTIME] = 0; // timeout in deciseconds for noncanonical read tio.c_cc...
  • Linux读取RFID卡号(C串口编程)

    千次阅读 2017-04-28 21:33:52
    由于项目需要用到RFID、GPRS、摄像头等模块所以便看了一下,整理了一下学习思路,本篇先是整理一下串口读取RFID卡号的程序思路,后面还会更其他的 RFID模块:  本次采用的是125K的RFID读卡器和标签,很...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 297,249
精华内容 118,899
关键字:

linux读取返回

linux 订阅