错误提示

Linux 提供的系统调用API,通常会在失败的时候返回 -1。如果想获取更多更详细的报错信息,需要借助全局变量 errno 和 perror 函数:

#include <stdio.h>
void perror(const char *s); #include <errno.h>
const char *sys_errlist[];
int sys_nerr;
int errno;

全局变量 errno

代码执行过程中发生错误时,Linux 会将 errno 这个全局变量设置为合适的值。errno 就是一个整数,对应系统中预先定义好的一个提示字符串。

perror 函数

perror 函数会读取 errno,然后找到预定义的提示字符串,最后将参数字符串、已定义的提示字符串拼接到一起,中间用冒号加空格分隔。相当于给错误信息加的注释。

示例

#include <stdio.h>
#include <errno.h>
#include <fcntl.h> int main()
{
char name[] = "non-exists.txt";
int ret = open(name, O_RDONLY);
if (ret < 0)
{
printf("%d\n", errno);
perror("this is my error");
}
return 0;
}

报错提示为:

2
this is my error: No such file or directory

命令行传参

C 程序的入口是 main 函数,其完整写法是包含两个参数的:

int main(int argc, char* argv[]);

其中第一个参数是命令行参数的个数,第二个参数是命令行参数数组。

例如下面这段代码:

#include <stdio.h>

int main(int argc, char* argv[])
{
printf("argc is: %d\n", argc);
printf("argv[0] is: %s\n", argv[0]);
}

执行的命令默认是第一个参数,所以无任何参数时的输出为:

argc is: 1
argv[0] is: ./a.out

可以借助 argc 来遍历所有的参数:

#include <stdio.h>

int main(int argc, char* argv[])
{
int i;
printf("argc is: %d\n", argc);
for (i = 0; i < argc; i++)
{
printf("argv[%d] is: %s\n", i, argv[i]);
}
}

执行命令,同时传入参数:

# ./a.out  666 hello world test haha
argc is: 6
argv[0] is: ./a.out
argv[1] is: 666
argv[2] is: hello
argv[3] is: world
argv[4] is: test
argv[5] is: haha

【Linux 应用编程】基础知识的更多相关文章

  1. [转] - Linux网络编程 -- 网络知识介绍

    (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...

  2. 1)Linux程序设计入门--基础知识

    )Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编译 Makef ...

  3. TCP与UDP比较 以及并发编程基础知识

    一.tcp比udp真正可靠地原因 1.为什么tcp比udp传输可靠地原因: 我们知道在传输数据的时候,数据是先存在操作系统的缓存中,然后发送给客户端,在客户端也是要经过客户端的操作系统的,因为这个过程 ...

  4. 16第一章 ASP.Net编程基础知识

    第一章        ASP.Net编程基础知识 第一章        ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...

  5. SHELL脚本编程基础知识

    SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...

  6. C#网络编程基础知识

    C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...

  7. 服务器编程入门(4)Linux网络编程基础API

      问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字( ...

  8. Linux 高性能服务器编程——Linux网络编程基础API

    问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字(so ...

  9. Linux CGI编程基础【整理】

    Linux CGI编程基础 1.为什么使用CGI? 如前面所见,任何的HTML均是静态网页,它无法实现一些复杂的功能,而CGI可以为我们实现.如:a.列出服务器上某个目录中的文件,对目录中的文件进行操 ...

  10. 第5章 Linux网络编程基础

    第5章 Linux网络编程基础 5.1 socket地址与API 一.理解字节序 主机字节序一般为小端字节序.网络字节序一般为大端字节序.当格式化的数据在两台使用了不同字节序的主机之间直接传递时,接收 ...

随机推荐

  1. VS编译器问题总结

    error C2236: 意外的“class”“CTsgBaseTask”.是否忘记了“;”? 出现这个问题的原因是在引用的一个头文件中定义的一个类最后没有加分号";".

  2. puppet之模板和类

    puppet之模板和类 不同节点布置资源 vim /etc/puppet/manifests/site.pp 1 import "nodes/*.pp" 建立节点文件 mkdir ...

  3. QWidget 设置背景图片

    QWidget 设置背景图片办法: 利用 QPaltette QPixmap pixmap("back.png"); QPalette palette; palette.setBr ...

  4. PAT Advanced 1048 Find Coins (25 分)

    Eva loves to collect coins from all over the universe, including some other planets like Mars. One d ...

  5. 2019长安大学ACM校赛网络同步赛 J Binary Number(组合数学+贪心)

    链接:https://ac.nowcoder.com/acm/contest/897/J 来源:牛客网 Binary Number 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32 ...

  6. Java基本的程序结构设计 大数操作

    大数操作 BigInteger 不可变的任意精度的整数.所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型).BigInteger 提供所有 Java 的基本整数操 ...

  7. 数据结构和算法(java版本)学习指南

    1 数据结构和算法内容介绍 2 数据结构和算法的概述 3 稀疏数组SparseArray

  8. ArrayList为什么是线程不安全的

    首先需要了解什么是线程安全:线程安全就是说多线程访问同一代码(对象.变量等),不会产生不确定的结果. 既然说ArrayList是线程不安全的,那么在多线程中操作一个ArrayList对象,则会出现不确 ...

  9. kvm:双网卡做bond+桥接

    一,KVM基础 kvm是一种技术,云计算是一种模式,虚拟化是利用相应的技术方法在一台物理机器上将其按照不同的需求划分成多个相同或者不同的虚拟操作系统,并且各个虚拟系统可以同时运行,互不干扰,其中任何一 ...

  10. Power-Aware GateSim Debug

    For PAG debug, the following steps may be useful. 1. Get correct netlists from PD which contain powe ...