::write()和::read()没有被声明为错误.Qt5 UNIX信号处理
::write() and ::read() has not been declared error. Qt5 UNIX signal handling
所以,我试图按照教程给出的
http://qt-project.org/doc/qt-5/unix-signals.html捕获UNIX/Linux信号,并在被它们触发时做一些与Qt相关的事情。
它在qtDocs上,所以我认为它是合法的。
我现在的代码如下:
mydaemon.cpp
#include "mydaemon.h"
#include <QDebug>
#include <QObject>
#include <QSocketNotifier>
#include <csignal>
#include <sys/socket.h>
#include <iostream>
#include <stdio.h>
#include <signal.h>
//needed to not get an undefined reference to static members
int MyDaemon::sighupFd[2];
int MyDaemon::sigtermFd[2];
MyDaemon::MyDaemon(QObject *parent)
: QObject(parent)
{
if (::socketpair(AF_UNIX, SOCK_STREAM, 0, sighupFd))
qFatal("Couldn't create HUP socketpair");
if (::socketpair(AF_UNIX, SOCK_STREAM, 0, sigtermFd))
qFatal("Couldn't create TERM socketpair");
snHup = new QSocketNotifier(sighupFd[1], QSocketNotifier::Read, this);
connect(snHup, SIGNAL(activated(int)), this, SLOT(handleSigHup()));
snTerm = new QSocketNotifier(sigtermFd[1], QSocketNotifier::Read, this);
connect(snTerm, SIGNAL(activated(int)), this, SLOT(handleSigTerm()));
}
MyDaemon::~MyDaemon() {}
void MyDaemon::hupSignalHandler(int)
{
qDebug() << "signal hup";
char a = '1';
::write(sighupFd[0], &a, sizeof(a));
}
void MyDaemon::termSignalHandler(int)
{
qDebug() << "signal term";
char a = '1';
::write(sigtermFd[0], &a, sizeof(a));
}
void MyDaemon::handleSigTerm()
{
snTerm->setEnabled(false);
char tmp;
::read(sigtermFd[1], &tmp, sizeof(tmp));
// do Qt stuff
qDebug() << "MyDaemon::handleSigTerm";
snTerm->setEnabled(true);
}
void MyDaemon::handleSigHup()
{
snHup->setEnabled(false);
char tmp;
::read(sighupFd[1], &tmp, sizeof(tmp));
// do Qt stuff
qDebug() << "MyDaemon::handleSigHup";
snHup->setEnabled(true);
}
现在,当我创建我的c++类并尝试构建时,它会给出如下错误,
/home/xxxx/Documents/Qt Projects/mainScreen/MyDaemon .cpp:-1:在静态成员函数'static void MyDaemon::termSignalHandler(int)'中:/home/xxxx/documents/qt Projects/mainScreen/mydaemon.cpp:49: error: '::write'未被声明::write(sigtermFd[0], &a, sizeof(a));^
等,适用于::read()或::write()调用的所有实例。我不知道我做错了什么,我很感激任何帮助:)
如果您正在使用"基本" Unix函数,则需要使用
#include <unistd.h>
这将给你read
, write
, open
, close
, sleep
, usleep
和许多其他功能。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- CMake 错误:无法创建命名生成器 CodeLite - Unix 生成文件
- C++中的分段错误 - Rougewave(仅在Linux中而不是在Unix中)
- Unix可执行文件上的Mac分段错误,文件编译正常
- Unix 命令行在编译后无法运行程序,没有错误消息
- Unix套接字发送接收客户端到服务器大块数据错误
- 代码在visualstudio中运行良好,但当转移到Unix时,我会收到错误
- Unix 错误消息"Killed"
- ::write()和::read()没有被声明为错误.Qt5 UNIX信号处理
- 我得到编译器错误,而在unix中编译我的代码
- Netbeans 显示 unix 系统调用错误"getcontext"
- C/ c++程序在读取数组末尾时是否会出现段错误(UNIX)
- 即使重定向了标准输出和标准错误,Unix程序如何在屏幕上显示输出?
- 代码在Visual Studio中可以很好地编译,但在使用g++的Unix终端中就不行了.我在多维向量处得到一个错误.为
- AIX unix服务器上的c++编译错误