C++ 笔记(26)— 主函数 main(int argc, char *argv[]) 参数说明

带形参的 main 函数,如

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

UNIXLinux 以及 Mac OS 操作系统中 C/C++main 函数标准写法,并且是血统最纯正的 main 函数写法。

1. argc、argv的具体含义

  • argc:(argument count)int 型的 argc ,用来统计程序运行时发送给 main 函数的命令行参数的个数,在 VS 中默认值为 1。

  • argv:(argument vector)char* 型的 argv[] ,字符串数组,用来存放指向字符串参数的指针数组,每一个元素指向一个参数。各个参数以空格分开。

其中:

argv[0]:指向程序运行的全路径名

argv[1]:指向在命令行中执行程序名后的第一个字符串

argv[2]:指向执行程序名后的第二个字符串

argv[3]:指向执行程序名后的第三个字符串

argv[argv]:为NULL

  • 第三个参数,char** 型的 env ,为字符串数组。env[] 的每一个元素都包含 ENVVAR=value形式的字符串,其中 ENVVAR 为环境变量,value 为其对应的值。平时使用到的比较少。

2. 使用示例

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
    for(int i=0; i<=argc; i++)
    {
        cout << "argc[" << i << "] is " << argv[i] << endl;
    }

    return 0;
}

输出结果:

wohu@wohu:~/C++/OpenCV$ ./example.out  a  b     c
argc[0] is ./example.out
argc[1] is a
argc[2] is b
argc[3] is c
argc[4] is 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是RK3588板子使用MPP进行H.264编码的示例C++代码: ```c++ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> #include <errno.h> #include "rk_mpi.h" #include "rk_venc.h" #define MAX_FILE_PATH_SIZE 256 #define MAX_FRAME_BUF_SIZE (1920*1080*3/2) int main(int argc, char** argv) { // 初始化MPP模块 RK_MPI_SYS_Init(); // 打开输入文件 char input_path[MAX_FILE_PATH_SIZE] = "/path/to/input.yuv"; int input_fd = open(input_path, O_RDONLY); if (input_fd < 0) { printf("Failed to open input file %s: %s\n", input_path, strerror(errno)); return -1; } // 打开输出文件 char output_path[MAX_FILE_PATH_SIZE] = "/path/to/output.h264"; int output_fd = open(output_path, O_WRONLY | O_CREAT | O_TRUNC, 0666); if (output_fd < 0) { printf("Failed to open output file %s: %s\n", output_path, strerror(errno)); close(input_fd); return -1; } // 获取输入文件大小 struct stat input_stat; fstat(input_fd, &input_stat); int input_size = input_stat.st_size; // 映射输入文件到内存 unsigned char* input_buf = (unsigned char*) mmap(NULL, input_size, PROT_READ, MAP_SHARED, input_fd, 0); if (input_buf == MAP_FAILED) { printf("Failed to mmap input file: %s\n", strerror(errno)); close(input_fd); close(output_fd); return -1; } // 初始化编码参数 MPP_ENC_CFG cfg; memset(&cfg, 0, sizeof(cfg)); cfg.frm_cfg.width = 1920; cfg.frm_cfg.height = 1080; cfg.frm_cfg.fmt = MPP_FMT_YUV420SP; cfg.rc_mode = MPP_ENC_RC_MODE_CBR; cfg.bps_target = 2000000; cfg.fps_in = 25; cfg.fps_out = 25; cfg.gop = 50; cfg.profile = 100; // 创建编码器 MPP_ENC_CTX* enc_ctx = NULL; RK_MPI_VENC_CreateContext(&enc_ctx, RK_ID_VENC_H264); RK_MPI_VENC_RegisterCallback(enc_ctx, NULL, NULL); // 配置编码器参数 RK_MPI_VENC_SetConfig(enc_ctx, RK_MPI_VENC_CFG_BASE, &cfg, sizeof(cfg)); RK_MPI_VENC_StartRecvPic(enc_ctx); // 编码每一帧 unsigned char* frame_buf = (unsigned char*) malloc(MAX_FRAME_BUF_SIZE); int frame_size = 1920*1080*3/2; int frame_cnt = input_size / frame_size; for (int i = 0; i < frame_cnt; i++) { // 从输入文件读取一帧数据 unsigned char* input_frame = input_buf + i * frame_size; // 填充MPP编码器的输入数据 MPP_ENC_DATA enc_data; memset(&enc_data, 0, sizeof(enc_data)); enc_data.pbuf = input_frame; enc_data.buf_size = frame_size; enc_data.time_stamp = i * 40; enc_data.eos = (i == frame_cnt - 1); // 编码一帧数据 RK_MPI_VENC_SendFrame(enc_ctx, &enc_data); // 获取编码后的数据 MPP_ENC_DATA pkt; memset(&pkt, 0, sizeof(pkt)); int ret = RK_MPI_VENC_GetStream(enc_ctx, &pkt, RK_TRUE); if (ret == RK_SUCCESS) { // 将编码后的数据写入输出文件 write(output_fd, pkt.pbuf, pkt.buf_size); RK_MPI_VENC_ReleaseStream(enc_ctx, &pkt); } } // 销毁编码器 RK_MPI_VENC_StopRecvPic(enc_ctx); RK_MPI_VENC_DestroyContext(enc_ctx); // 释放内存映射和资源 munmap(input_buf, input_size); close(input_fd); close(output_fd); return 0; } ``` 需要注意的是,上述代码仅供参考,实际使用时可能需要根据具体的需求和参数进行适当的修改。同时,还需要确保MPP已经正确安装并且编码标准和参数设置正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值