zoukankan      html  css  js  c++  java
  • 【Linux 应用编程】基础知识

    错误提示

    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
    ", 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
    ", argc);
        printf("argv[0] is: %s
    ", 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
    ", argc);
        for (i = 0; i < argc; i++)
        {
            printf("argv[%d] is: %s
    ", 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
    
  • 相关阅读:
    Help-C#-属性-生成事件:预先生成事件和后期生成事件
    小说-长篇小说:《追风筝的人》
    散文-笔记:《皮囊》
    小说-励志:《妥协的力量》
    ons.ONSFactory.cs
    ons.ONSFactoryAPI.cs
    ons.ONSFactoryPorperty.cs
    System.Object.cs
    ons.MessageOrderListener.cs
    ons.MessageLisenter.cs
  • 原文地址:https://www.cnblogs.com/kika/p/10851502.html
Copyright © 2011-2022 走看看