首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >*write()和::read()未被声明为错误。Qt5 UNIX信号处理

*write()和::read()未被声明为错误。Qt5 UNIX信号处理
EN

Stack Overflow用户
提问于 2014-07-08 08:13:41
回答 1查看 2.6K关注 0票数 1

所以,我试着遵循给出的教程

http://qt-project.org/doc/qt-5/unix-signals.html

捕捉UNIX/Linux信号,并在它们触发时执行与Qt相关的操作。

它在qtDocs上,所以我认为它是合法的。

我现在的代码如下:

mydaemon.cpp

代码语言:javascript
复制
#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:在静态成员函数‘静态无效MyDaemon::termSignalHandler(Int):/home/xxxx/Documents/Qt Projects/mainScreen/mydaemon.cpp:49: error:’:write::write ::write(sigtermFd,&a,sizeof(a));

等等,对于::read()或::write()调用的所有实例。我不知道我做错了什么,我很感激你的帮助:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-08 22:00:29

如果使用的是“基本”Unix函数,则需要使用

代码语言:javascript
复制
#include <unistd.h>

这将为您提供readwriteopenclosesleepusleep和许多其他函数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24626778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档