Как обрабатывать ошибки печати оболочки в Unix с помощью popen - PullRequest
0 голосов
/ 06 февраля 2019

Я написал некоторый код для получения обновленных файлов GPG по пути /home/user/GPG_FILES.Он отлично работает, когда файлы существуют в пути, но моя проблема заключается в том, что путь не содержит файлов GPG, в то время как он печатает («ls: невозможно получить доступ к * .gpg: нет такого файла или каталога») в моей оболочке, котораяЯ не хочу, чтобы это печаталось в моей оболочке.Я хочу обработать эту ошибку в своем коде, имея собственное описание ошибки.

int main()
{
    while( 1 )
    {
        char buffer[ 1024 + 1 ];
        char stip_file_path[ 2048 + 1  ];
        char gpg_file_name[ 2048 + 1  ];
        FILE *p;

        memset( stip_file_path, 0, sizeof( stip_file_path ));
        sprintf( stip_file_path, "%s/%s/%s", "home", "user", "GPG_FILE" );
        chdir( stip_file_path );
        p = popen("ls -ltr *.gpg| grep ^- | tail -1 | awk '{ print $(NF) }'", "r");
        if(!p)
        {
            printf("Error opening pipe");
            return -1;
        }
        memset( buffer, 0, sizeof( buffer ));
        char *ptr = buffer;
        while(!feof(p))
        {
            fread( ptr, 1, 1, p );
            ptr++;
        }
        if( pclose(p) == -1 )
        {
            printf("Error opening close");
            return -1;
        }
        printf("get_updated_file success(%s)", gpg_file_name );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...