Как перенаправить вывод консоли в файл в оболочке VxWorks? - PullRequest
0 голосов
/ 17 октября 2018

В Windows или Linux очень часто мы перенаправляем вывод консоли на файл, как показано ниже:

Windows:

dir > text

Linux:

ls -l > text

IИнтересно, как сделать подобное в оболочке VxWorks.

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Я изменил «0x102» в «saveFd = open (« myfile.txt », 0x102, 0777)» на «0x202», тогда он работает.Весь дисплей консоли был перенаправлен в «myfile.txt».В предыдущем посте я получил ошибку.Я думал, что он завис после "ioGlobalStdSet (1, saveFd)".Он не завис, но перенаправил весь экран в «myfile.txt», и я использовал «CTL-C», чтобы остановить перенаправление.

0 голосов
/ 26 октября 2018

В следующих фрагментах кода показано, как сохранить все выходные данные последовательной консоли в файл.

Попробуйте -> tyco0_write_to_file 4096

#include <tyLib.h>
#include <private/iosLibP.h>

int tyco0_log_max_size = -1;
int tyco0_log_fd = -1;

int tyco0_write_hook(TY_DEV_ID pTyDev, char *buffer, int nbytes)
{
    FD_ENTRY *p_fd_entry;
    static int bytes_written = 0;

    if ('0' == pTyDev->devHdr.name[6]) { /* /tyCo/0 */
        if ((bytes_written+nbytes)<tyco0_log_max_size) {
            (void)write(tyco0_log_fd,buffer,nbytes);
            bytes_written += nbytes;
        }
        else {
            (void)write(tyco0_log_fd,buffer,tyco0_log_max_size-bytes_written);
            p_fd_entry = iosFdMap(1);
            p_fd_entry->pDrvEntry->de_write = tyWrite;
            close(tyco0_log_fd);
            bytes_written = 0;
        }
    }

    return tyWrite(pTyDev,buffer,nbytes);
}

int tyco0_write_to_file(int file_max_size)
{
    FD_ENTRY *p_fd_entry;

    p_fd_entry = iosFdMap(1); /*  /tyCo/0 */
    if (NULL==p_fd_entry) {
        perror("iosFdMap");
        return -1;
    }

    tyco0_log_fd = open("/ram/tyco0.log",O_CREAT|O_RDWR,0);
    if (tyco0_log_fd == -1) {
        perror("open");
        return -1;
    }

    if (file_max_size <= 0) {
        file_max_size = 1024;
    }
    tyco0_log_max_size = file_max_size;

    if (p_fd_entry->pDrvEntry->de_write == tyWrite) {
        p_fd_entry->pDrvEntry->de_write = tyco0_write_hook;
    }
    else {
        printf("tyWrite not found\n");
        close(tyco0_log_fd);
        return -1;
     }

    return 0;
}
0 голосов
/ 17 октября 2018

Вы можете попробовать что-то вроде этого:

-> saveFd = open("myfile.txt",0x102, 0777 )
-> oldFd = ioGlobalStdGet(1)
-> ioGlobalStdSet(1, saveFd)
-> runmytest()
...
-> ioGlobalStdSet(1, oldFd)

Это перенаправит весь код в файл, который вы открыли, в этом случае myfile.txt

...