C 上的输入流



所以我很难理解和让我的代码工作。

我有那个代码:

int main(int argc, char *argv[])
{   
    while(1){
        // Buffer containing one sample (left and right, both 16 bit).
        int16_t samples[2];
        unsigned cbBuffer=sizeof(samples);  // size in bytes of 
        // Read one sample from input
        int got=read(STDIN_FILENO, samples, cbBuffer);
        if(got<0){
            fprintf(stderr, "%s: Read from stdin failed, error=%s.", argv[0], strerror(errno));
            exit(1);
        }else if(got==0){
            break;   // end of file
        }else if(got!=cbBuffer){
            fprintf(stderr, "%s: Did not receive expected number of bytes.n", argv[0]);
            exit(1);
        }
        // Copy one sample to output
        int done=write(STDOUT_FILENO, samples, cbBuffer);
        if(done<0){
            fprintf(stderr, "%s: Write to stdout failed, error=%s.", argv[0], strerror(errno));
            exit(1);
        }else if(done!=cbBuffer){
            fprintf(stderr, "%s: Could not read requested number of bytes from stream.n", argv[0]);
        }
    }
    return 0;
}

我在终端上打电话

./mp3_file_src.sh bn9th_m4.mp3 | ./passthrough  > /dev/null

我想修改代码,以便他可以获取数字 n 并处理 n 个样本(所以我在我的代码中得到samples[2*n])。如果没有为可执行文件提供任何参数,则使用默认值。

如果我理解正确,我可以验证是否给出了参数,如果argc>2?但是我似乎无法理解如何获得该参数并将其传递到我的代码中。

知道吗?

只需通过argv[1]访问它。如果是数字参数,则需要将其从字符串转换为数字,例如:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
    int default_opt = 5, option = 0;
    if ( argc < 2 ) {
        printf("You didn't supply an argument, using default.n");
        option = default_opt;
    } else {
        char * endptr;
        option = strtol(argv[1], &endptr, 10);
        if ( *endptr ) {
            printf("You supplied an invalid argument, exiting.n");
            exit(EXIT_FAILURE);
        }
    }
    printf("Option set to %d.n", option);
    return EXIT_SUCCESS;
}

输出:

paul@MacBook:~/Documents/src/scratch$ ./arg
You didn't supply an argument, using default.
Option set to 5.
paul@MacBook:~/Documents/src/scratch$ ./arg 7
Option set to 7.
paul@MacBook:~/Documents/src/scratch$ ./arg whut
You supplied an invalid argument, exiting.
paul@MacBook:~/Documents/src/scratch$

argcargv中的元素数,其中包含提供给程序的参数。argvargv[0])的第一个元素是可执行文件名,所以argc总是至少为1。因此,您检查是否argc > 2以查看是否给出了任何参数。

请注意,参数始终是字符串,因此要从中提取数字,您需要使用 strtol 或类似内容。

相关内容

  • 没有找到相关文章

最新更新