perror()与strerror()的应用及区别 man手册查询

perror() 和 strerror() 以一种直观的方式打印出错误信息,对于调试程序和编写优秀的程序非常有用。

下面是perror() 与 strerror() 的使用范例及区别:

perror()原型:

#include <stdio.h>
void perror(const char *s);

其中,perror()的参数s 是用户提供的字符串。当调用perror()时,它输出这个字符串,后面跟着一个冒号和空格,然后是基于当前errno的值进行的错误类型描述。

strerror()原型:

#include <string.h>
char * strerror(int errnum);

这个函数将errno的值作为参数,并返回一个描述错误的字符串

/*rename.c*/
#include<stdio.h>
#include <string.h>
#include <errno.h>
int main(int argc,char **argv)
{
char path[]="./first.c";
char newpath[] = "./second.c";
char newpathnot[] = "./gong/suo.c";
extern int errno;
if( rename(path,newpathnot) == 0)
{
printf("the file %s was moved to %s.",path,newpathnot);
}
else
{
printf("Can't move the file %s.\n",path);
printf("errno:%d\n",errno);
printf("ERR:%s\n",strerror(errno));
perror("Err");
}
if(rename(path,newpath) == 0)
printf("the file %s was moved to %s.\n",path,newpath);
else
{
printf("Can't move the file %s.\n",path);
printf("errno:%d\n",errno);
printf("ERR:%s\n",strerror(errno));
}
return 0;
}
gcc rename.c -o rename
./rename
Can't move the file ./first.c.
errno:2
ERR:No such file or directory
Err: No such file or directory
the file ./first.c was moved to ./second.c


.


strerror()方法与perror()的用法十分相似。

    先谈谈perror()的用法,这个方法用于将上一条语句(方法)执行后的错误打印到标准输出上。一般情况下(没有使用重定向的话),就是输出到控制台上。

但是,如果我需要了解另外一个进程的某一个方法执行的错误,或者更briefly,我就希望将错误打印到一个文件里面,perror()就不太合适了!

为了实现我刚刚说到的要求,我们首先要将错误放到一个字符串里面。这个时候,strerror()就合适了!

strerror(errno)

    首先,系统会根据上一条语句的执行错误情况,将errno赋值.。关于这点,我们首先明白两点。第一,errno是一个系统变量,是不需要我们赋值或者声明的。第二,errno是一个int类型的变量,而且其中的值对应一种特定错误类型

然后,关于streorror()本身,可以这么理解。顾名思义,streorror=string+error,就是将errno值翻译成描述错误类型的string语句!

===========================ubuntu下man的应用===============================

1, man 介绍

  Linux提供了丰富的帮助手册,当你需要查看某个命令,某个函数的使用方法时,不必在网上到处查找,只要man一下即可。

  Linux的man手册共有以下几个章节:

  1) Standard Commands (标准命令)

  2) System Calls (系统调用)

  3) Library Functions (库函数)

  4) Special Devices (设备说明)

  5) File Formats (文件格式)

  6) Games and Toys (游戏和娱乐)

  7) Miscellaneous (杂项)

  8) Administrative Commands (管理员命令)

2, 手册完善

  ubuntu中man的手册默认情况下并没安装完全。所以用man命令查看C语言函数原型等会失败。使用以下几条命令进行完善:

  a, sudo apt-get install manpages          ()

  b, sudo apt-get install manpages-de         ()

  c, sudo apt-get install manpages-de-dev      ()

  d, sudo apt-get install manpages-dev       (C语言库函数)

3, man命令的使用

  命令格式:man [章节号] 手册名称

  man是按照手册的章节号的顺序进行搜索的,比如:man sleep 只会显示sleep命令的手册,如果想查看库函数sleep,就要输入man 3 sleep。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下解压缩包命令

各种压缩文件的解包与打包命令 .tar 解包&#xff1a;tar xvf FileName.tar打包&#xff1a;tar cvf FileName.tar DirName——————————————— .tar .xz 解包&#xff1a;xz -d openvpn-2.3.5.tar.xz --stdout | tar -xv 打包&#xff1a;tar cvf - openvpn-2.3.…

PyQt学习总结

1&#xff09;QDoubleSpinBox() setRange(min,max) 设置范围Min~maxsetSingleStep(step) 设置步长为stepsetValue(value) 设置当前值为valuesetPrefix("$") 设置前缀为$setSuffix("%"&#xff09; 设置后缀为%selectAl…

Qt样例学习1(数字时钟)

/*main.cpp*/ #include <QApplication> #include <QTextCodec> #include "digitalclock.h"int main(int argc, char *argv[]) {QApplication app(argc, argv);//显示本地化&#xff0c;解决中文乱码.QTextCodec::setCodecForTr(QTextCodec::codecForLoca…

linux网络编程--数据结构与函数原型

套接字有三种类型&#xff1a;流式套接字&#xff08;SOCK_STREAM&#xff09;&#xff0c;数据报套接字&#xff08;SOCK_DGRAM&#xff09;及原始套接字。 socket() | bind() | listen() | socket() a…

OpenGL画简单图形

#include <GL/glut.h>#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") /*三角形GL_TRIANGLES(三个点成一个三角形)GL_TRIANGLE_STRIP(相邻三点成一个三角形)GL_TRIANGLE_FAN(同第二个&#xff0c;后2个和第一…

ubuntu下编译OpenGL

安装基本编译环境&#xff1a; sudo apt-get install build-essential 安装Opengl工具箱&#xff1a; sudo apt-get install freeglut3-dev /* main.cpp */ #include <GL/glut.h> #include <stdlib.h> #include <stdio.h> #include "app.h" using …

关于linux的进程和线程

关于linux的进程和线程 http://kenby.iteye.com/blog/1014039 Linux下的多线程编程 http://fanqiang.chinaunix.net/a4/b8/20010811/0905001105.html 线程的最大特点是资源的共享性&#xff0c;但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程…

linux setsockopt函数

功能描述&#xff1a; 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中&#xff0c;它们总会出现在最上面的套接字层。当操作套接字选项时&#xff0c;选项位于的层和选项的名称必须给出。为了操作套接字层的选项&#xff0c;应该 将层的值指定为SOL_S…

struct linger

Linux下tcp连接断开的时候调用close()函数&#xff0c;有优雅断开和强制断开两种方式。那么如何设置断开连接的方式呢&#xff1f;是通过设置socket描述符一个linger结构体属性。linger结构体数据结构如下&#xff1a; #include <arpa/inet.h>struct linger {int l_onoff…

几种常见的排序算法

冒泡排序 冒泡排序算法的运作如下: 1、比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。 2、对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。这步做完后&#xff0c;最后的元素会是最大的数。 3、针对所有的元素重复以上的步骤…

linux下调试工具的应用

http://www.ibm.com/developerworks/cn/linux/l-pow-debug/

数据结构--赫夫曼树及其应用

讲解请参考 赫夫曼 ------ 赫夫曼树和赫夫曼编码的存储表示------ typedef struct {unsigned int weight;unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; typedef char ** HuffmanCode;void HuffmanCoding(HuffmanTree& HT,HuffmanCode & HC,int *w,int …

sqlite C/C++ API

官网&#xff1a;https://sqlite.org/download.html 下载代码安装三步走&#xff1a; ./configure // ./configure --help查看安装参数设置&#xff0c;学习configure的配置&#xff0c;明白安装后include、lib、bin等文件的位置 make make install学习SQL基本语法&#xff0…

线程属性总结

今天面试那哥们问起线程属性&#xff0c;me竟然就说出了一个&#xff0c;囧 学习&#xff1a;http://blog.csdn.net/zsf8701/article/details/7842392 http://blog.csdn.net/jxhnuaa/article/details/3254299 http://blog.sina.com.cn/s/blog_9bd573450101hgdr.html int pthre…

单链表面试经典问题

/************************************************** http://www.cnblogs.com/lifuqing/archive/2011/08/20/List.html http://www.cnblogs.com/wenjiang/p/3310233.html 链表经典问题汇总:http://blog.csdn.net/vividonly/article/details/6673758 链表有关的常见面试题:htt…

Linux SO_KEEPALIVE属性,心跳

对于面向连接的TCP socket,在实际应用中通常都要检测对端是否处于连接中,连接端口分两种情况: 1、连接正常关闭,调用close() shutdown()连接优雅关闭,send与recv立马返回错误,select返回SOCK_ERR; 2、连接的对端异常关闭,比如网络断掉,突然断电. 对于第二种情况,判断连接是否断…

Linux下ARM开发环境搭建

本人的系统环境&#xff1a;Linux ubuntu 3.8.0-35-generic #50-Ubuntu SMP Tue Dec 3 01:25:33 UTC 2013 i686 i686 i686 GNU/Linux 1、安装skyeye sudo apt-get install skyeye s kyeye -h可以看到skyeye的版本号为1.2.5也可以到http://sourceforge.jp/projects/sfnet_skyeye…

cygwin开发环境搭建与apt-cyg的应用

1、Cygwin安装 http://www.cygwin.com/下载安装工具 具体安装过程参照http://jingyan.baidu.com/article/6b97984d83dfe51ca2b0bf0e.html 2、Cygwin一些设置 打开Cygwin终端,右击打开 Options...选项 Text可以设置字体的一些属性,如大小、编码,Locale 选择C, Character set 选择…

CentOS下升级python版本

源码安装python 安装python源码所依赖的工具及依赖的库 yum install -y make gcc gcc-c yum install -y bzip2 bzip2-devel yum install zlib-devel openssl openssl-devel -y yum install -y make xz下载安装python源码 从官方网站或者华为镜像源下载所有需的源码包&#xff0…

linux下confstr与uname函数_获取C库与内核信息

#include <stdio.h> #include <sys/utsname.h> //unameint main(int argc, char **argv[]) {struct utsname u;if (uname(&u) ! -1) {printf("获取当前内核的名称和信息如下\n""sysname:%s\n""nodename:%s\n""release:%s\…