一、来回在屏幕和文件之间打印

在网上没找到在屏幕和文件来回打印的方法,翻了下UNIX环境高级编,里面有个freopen用于在一个指定的流上打开一个指定的文件,如果要将标准输出打印到文件,需要调用该函数,将指定的文件打开为预定义的流。

FILE *freopen(const char * pathname, const char *type, FILE, *fp);

对于屏幕标准输出,可以通过ttyname获取终端名称,在要恢复时,调用freopen再次打开即可。

#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>char *g_tty_name;
#define LOG_FILE_PATH "/home/test"int main(int argc, char* argv[])
{if (isatty(STDOUT_FILENO)){g_tty_name = ttyname(STDOUT_FILENO);}printf("step 1\n");set_stdout(LOG_FILE_PATH);printf("step 2\n");recover_stdout();printf("step 3\n");set_stdout(LOG_FILE_PATH);printf("step 4\n");exit(0);
}void set_stdout(char *filepath)
{freopen(filepath,"ab",stdout);
}void recover_stdout(void)
{freopen(g_tty_name,"ab",stdout);}

二、inet_ntoa和inet_ntop报段错误

64位linux下inet_ntoa()返回值竟然为int,printf报段错误_Yerasel的专栏-CSDN博客

在执行《UNIX环境高级编程》图16-18用例时获取IP地址失败,参考上述文档,对于64位Linux如果没有添加#include <arpa/inet.h>库,则printf("addr inet_ntop %s", abuf);正常,后面两个异常。如果添加了#include <arpa/inet.h>库,则三个printf均执行正常。

printf("addr inet_ntop %s", abuf);

printf("addr inet_ntop %s", addr);
printf("addr inet_ntoa %s", inet_ntoa(sinp->sin_addr));

struct sockaddr_in *sinp;
char abuf[INET_ADDRSTRLEN] = {0};
char *addr;addr = inet_ntop(AF_INET, &sinp->sin_addr, abuf, INET_ADDRSTRLEN);
printf("addr inet_ntop %s", abuf);
printf("addr inet_ntop %s", addr);
printf("addr inet_ntoa %s", inet_ntoa(sinp->sin_addr));

三、守护进程core文件不保存

在执行《UNIX环境高级编程》图16-18用例时,把服务器进程设置为守护进程,执行(二)中printf("addr inet_ntop %s", addr);没有产生core文件,查看/var/log/messages里面的系统日志如下,提示程序不属于任何软件包,并且ProcessUnpackaged设置为'no。

Jan 24 16:34:14 localhost kernel: prog16.18[95237]: segfault at ffffffff96541b10 ip 00007fc457a57f1b sp 00007fff96541420 error 5 in libc-2.17.so[7fc457a0f000+1b6000]
Jan 24 16:34:14 localhost abrt-hook-ccpp: Saved core dump of pid 95237 (/home/c_test/linux_c/prog16.18) to /var/tmp/abrt/ccpp-2022-01-25-08:34:14-95237 (880640 bytes)
Jan 24 16:34:14 localhost abrt-server: Can't load public GPG key /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7
Jan 24 16:34:14 localhost abrt-server: Executable '/home/c_test/linux_c/prog16.18' doesn't belong to any package and ProcessUnpackaged is set to 'no'
Jan 24 16:34:14 localhost abrt-server: 'post-create' on '/var/tmp/abrt/ccpp-2022-01-25-08:34:14-95237' exited with 1
Jan 24 16:34:14 localhost abrt-server: Deleting problem directory '/var/tmp/abrt/ccpp-2022-01-25-08:34:14-95237'

abrtd:Executable ‘some execution‘ doesn‘t belong to any package and ProcessUnpackaged is set to ‘no‘_RToax-CSDN博客

根据上面文档,将/etc/abrt/abrt-action-save-package-data.conf里面的ProcessUnpackaged设置为 yes,再次执行则syslog提示如下。进入/var/tmp/abrt/ccpp-2022-01-25-08:38:25-95386目录,可以看到里面产生了coredump文件。

Jan 24 16:38:24 localhost kernel: prog16.18[95386]: segfault at 25ce12c0 ip 00007fe0873abf1b sp 00007fff25ce0bd0 error 4 in libc-2.17.so[7fe087363000+1b6000]
Jan 24 16:38:25 localhost abrt-hook-ccpp: Saved core dump of pid 95386 (/home/c_test/linux_c/prog16.18) to /var/tmp/abrt/ccpp-2022-01-25-08:38:25-95386 (880640 bytes)

UNIX环境高级编程(屏幕打印和inet_ntoa输出异常问题)相关推荐

  1. 《UNIX环境高级编程(第3版)》——1.7 出错处理

    本节书摘来自异步社区<UNIX环境高级编程(第3版)>一书中的第1章,第1.7节,作者:[美]W. Richard Stevens , Stephen A.Rago著,更多章节内容可以访问 ...

  2. 《UNIX 环境高级编程》学习笔记——UNIX 基础知识

    UNIX环境高级编程--UNIX 基础知识 引言 UNIX 体系结构 登录 文件和目录 输入和输出 程序和进程 出错处理 用户标识 信号 时间值 系统调用和库函数 引言 所有操作系统都为它们所允许的程 ...

  3. 【UNIX环境高级编程】

    [UNIX环境高级编程] 环境搭建 1.下载源码 wget http://apuebook.com/src.3e.tar.gz 2.解压 tar -zxvf src.3e.tar.gz 3.安装lib ...

  4. Unix环境高级编程 笔记

    Unix环境高级编程(第二版)学习笔记 这是一次较长时间的整理,然而跳跃了一些章节和很多知识点,仍然是很不完善很不全面的. 前言 操作系统某些问题 严格意义上,可将操作系统定义为一种软件,它控制计算机 ...

  5. 《UNIX环境高级编程(第3版)》

    <UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison ...

  6. UNIX环境高级编程-第三版

    Unix环境高级编程-第三版 之前学习了<Linux系统编程>对于常见的概念和函数都有了基础的认知,这里准备通过这本书,深入学习系统API相关内容.笔记内容会有所倾向,不会严格反应书本内容 ...

  7. unix环境高级编程 pdf_UNIX系统编程宝典,每一本都值得程序员珍藏

    这几本UNIX系统编程宝典,重印无数次,几代程序员都视如珍宝的几本书,小编在出版圈里快十年了,见证了这本书图灵版.异步社区版的出版.营销,对这套书倾注了一定的感情.今天继续分享给你们,好书总会有人还不 ...

  8. 开发日记-20190827 关键词 读书笔记《Unix环境高级编程(第二版)》DAY 3

    Referred Blogs 文件描述符标志,文件状态标志 Linux中文件描述符fd和文件指针flip的理解 Linux编程–文件描述符fd 文件共享 Unix支持在不同进程间共享文件. 内核使用了 ...

  9. 开发日记-20190822 关键词 读书笔记《Unix环境高级编程(第二版)》《掌控习惯》DAY 2

    Preface 话说,昨天开始尝试着去改变自己,从基础的习惯开始,11:30准时睡觉,平时差不多12:30才睡觉.按理说,比平时早了一个小时睡觉吧,然后我就把闹钟提前了45分钟,想着还能比平常多睡15 ...

最新文章

  1. android 键盘右下角回车改为搜索
  2. 使用netty模仿dubbo服务
  3. Mule的基本配置元素:Endpoint、Transformer、Filter、Flow
  4. 计算机基础应用模拟试题,计算机基础应用模拟试题5
  5. css/html目录
  6. android 加载json停顿,java – 在Android上解析~1 MB JSON非常慢
  7. 拓端tecdat|R语言中编写最小工作示例(MWRE)
  8. 三年经验前端社招面经——朴朴科技
  9. smtp邮件服务器配置,配置SMTP服务器
  10. JaxWsProxyFactoryBean调用WebService实例
  11. 【传智播客郑州】Hibernate Serach 5.9全文检索快速入门
  12. nginx 代理ip 和域名
  13. SpringMVC 学谈 (第一章)
  14. centos(11)-ps进程管理
  15. Hi3516DV300
  16. C++学习需要看的书籍
  17. 几个常用的js 函数汇总大全
  18. 教育部最新发布:180所高校本科新增AI课程,138所高校新增大数据课程
  19. linux安装各种系统插件
  20. 拜师————python基础入门——守破离学习法,海龟绘图,画出奥运五环图,day3

热门文章

  1. 计算机软件开发工程师简历,net软件工程师的简历范文
  2. 机器人c语言入门自学app,小车机器人之二【C语言基础】
  3. Android平台值得关注的开源项目
  4. Unity 富文本的使用
  5. **软件著作权登记**
  6. linux系统移植 基于zynq7000平台
  7. 将前端技术栈移植到掌上游戏机
  8. Android apk生成过程(超级简单)
  9. python手册 apk_python apk签名
  10. 主题 11:如何打造能力护城河