【问题标题】:How to check error messages from perror?如何检查来自 perror 的错误消息?
【发布时间】:2012-02-07 08:01:09
【问题描述】:

我知道这很简单,但我无法理解。

我正在使用操作系统 - Ubuntu。以下代码已经写在 mysql 源代码中(在 sql_parse.cc 文件中)。我需要检查 perror 错误消息。我怎样才能得到这些消息? 我认为此错误消息不会显示在我正在运行 mysql 客户端/服务器的控制台中?

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

{ 
string hashed;
int sockfd, n;
char buf[MAXDATASIZE], url[MAXDATASIZE], ack[6];
struct hostent *he;
struct sockaddr_in remote_addr;

if ((he=gethostbyname("localhost")) == NULL) { // get the host info
    perror("gethostbyname");
    exit(1);
    }

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    perror("socket");
    exit(1);
    }

remote_addr.sin_family = AF_INET; // host byte order
remote_addr.sin_port = htons(PORT); // short, network byte order
remote_addr.sin_addr = *((struct in_addr *)he->h_addr);
memset(&(remote_addr.sin_zero), '\0', 8); // zero the rest of the struct

if (connect(sockfd, (struct sockaddr *)&remote_addr, sizeof(struct sockaddr)) == -1) {
    perror("connect");
    exit(1);
    }

请帮帮我....

【问题讨论】:

  • 您是在询问将消息写入何处,以便数据库管理员可以在日志中找到它吗?或者您是在问程序如何发现perror是否在程序的其他地方使用过?
  • 我想检查上述情况是否有任何错误,然后perror 将打印错误消息,那么我在哪里可以获得这些消息?

标签: c++ stdout stderr


【解决方案1】:
  1. perror 函数是标准流之一。

  2. 它将输出提供给 stderr。 您可以将 stderr 输出重定向到 Linux 中的自定义位置(如文件或标准输出控制台)。

例如,在你编译你的代码之后,假设一个程序文件被创建为“myprogram”

如果你以这种方式运行这个文件:

./myprogram 2>&1

您可以在控制台中看到 perror 错误

针对你的特殊情况,你需要阅读 Mysql 错误日志。在 Debian 中,Mysql 配置文件是这样写的:

错误日志记录到 syslog 由于 /etc/mysql/conf.d/mysqld_safe_syslog.cnf.

因此,您可以通过读取系统日志文件来读取这些错误。您可以通过文本编辑器或 tail、less 等阅读 syslog:

sudo gedit /var/log/syslog

【讨论】:

  • 我将使用mysql -u root -p 运行mysql 程序,然后使用密码。那么我在哪里可以写2&gt;&amp;1
  • 对不起,我不是很明白。 Mysql 错误代码进入系统日志。您可以通过任何文本编辑器阅读 syslog。如“sudo gedit /var/log/syslog”
  • 上面的socket代码也用在了PHP源代码中。所以我必须看到stderr控制台。。
  • 我已经编辑了我的答案,它现在包括你的情况。顺便说一句,如果任何答案对您有帮助,您可以投赞成票。
  • 我已经检查了我的系统日志,但它没有显示错误消息..任何其他解决方案
猜你喜欢
  • 1970-01-01
  • 2015-10-28
  • 2013-02-23
  • 2016-11-10
  • 2012-09-04
  • 2010-10-19
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多