exec 自定义文件描述符

文件描述符是用于访问文件的一个抽象指针。存取文件离不开被称为“文件描述符”告的特殊数字。0、1和2分别是stdin、stdout和stderr的预留描述符。
我们可以使用exec命令创建自定义的描述符。如果你对其他编程语言进行文件编程非常熟悉,你可能已经注意到了文件打开模式。通常来说,会使用3种模式。
只读模式。
截断模式。
追加模式。

<操作符用于从文件中读取至stdin 。

>操作符用于截断模式的文件写入(数据在目标文件内容被截断之后写入)。

>>操作符用于追加模式的文件写入(数据被追加到文件的现有内容中,而且该目标文件中原有的内容不会丢失)。文件描述符可以用以上三种模式中的任意一种来创建。


为读取文件创建一个文件描述符:
$ exec 3< input.txt  使用文件描述符3打开并读取文件

我们可以这样使用它:

代码如下:

$ echo this is a test line > input.txt

$ exec 3< input.txt  

现在你就可以在命令中使用文件描述符3了。例如:

  
代码如下: $ cat <&3
this is a test line

如果要再次读取,我们就不能再继续使用文件描述符3了,而是需要用exec重新分配文件描述符3以便用于读取。

创建一个文件描述符用于写入( 截断模式):
$ exec 4>input .txt # 打开文件用于写入

例如:
 

代码如下: $ exec 4>input .txt
$ echo newline >&4
$ cat output.txt
newline


创建一个文件描述符用于写入(追加模式):
$ exec 5 >>input .txt

例如:
 

代码如下: $ exec 5 >>input .txt
$ echo appended line >&5
$ cat input.txt
newline

appended line



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Qt中,可以使用QSerialPort类来打开串口,并且不需要直接获取文件描述符。QSerialPort类提供了一组用于读写串口数据的方法和信号,可以更加方便和安全地操作串口。 下面是一个简单的示例代码,用于打开一个串口并发送数据: ``` #include <QCoreApplication> #include <QSerialPort> #include <QSerialPortInfo> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 查找可用的串口 QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts(); if (ports.isEmpty()) { qWarning() << "No serial ports found"; return 1; } // 打开第一个可用的串口 QSerialPort serialPort(ports.at(0)); if (!serialPort.open(QIODevice::ReadWrite)) { qWarning() << "Failed to open serial port"; return 1; } // 发送数据 QByteArray data("Hello, world!"); serialPort.write(data); // 关闭串口 serialPort.close(); return a.exec(); } ``` 在上面的代码中,我们首先调用QSerialPortInfo::availablePorts()方法查找当前可用的串口,然后通过QSerialPort类打开第一个可用的串口,并发送了一些数据。如果打开或发送数据失败,将会输出警告信息。 需要注意的是,由于串口通信是异步的,因此我们需要等待数据发送完成后才能关闭串口。在上面的代码中,我们使用了Qt的事件循环机制来等待程序退出。如果你不需要这样做,也可以使用QSerialPort::waitForBytesWritten()方法等待数据发送完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值