Как читать двоичный файл в программу c запускается команда оболочки - PullRequest
0 голосов
/ 24 октября 2018

В программе c мне нужно прочитать двоичный файл на удаленном компьютере, поэтому нужно вызвать команду SHELL, чтобы получить содержимое файла.Содержимое двоичного файла выглядит следующим образом.

0000000 0403 1007 0000 0000 0000 0600 0067 0000
0000010 0308 1e00 4946 494e 4153 2052 4f43 5052
0000020 202e 2020 0000 6590 5446 584c 3538 3137
0000030 3344 4e42 2d4c 3545 2042 2020 5203 9b00
0000040 1a00 0000 4a41 3052 3745 2054 2020 2020
0000050 2020 2020 3031 3231 3731 2020 f068 de03
0000060 0000 0000 0000 0000 0000 0000 0000 0000
*
0000100

Затем я вызываю команду SHELL 'hexdump file' и получаю вывод команды, обнаружив, что выходной буфер выглядит следующим образом.

30 30 30 30 30 30 30 30 30 34

код детали:

int sock_new = setup_vmi();
...
rc = write_buf(sock_new, TYPE_COMMAND, 0, cmd, strlen(cmd) + 1); //cmd is hexdump file

...
rc = read_buf(sock_new, &type, &info, &retbuf, &retbuf_size);//retbuf is the file content

И read_buf вызывает следующую функцию.

static __inline ssize_t
psread(
int fd,
char *buf_base,
size_t buf_size)
{
ssize_t n;
ssize_t buf_done = 0;
  again:
do {
    n = read(fd, buf_base, buf_size);
} while (n < 0 && errno == EINTR);
if (n > 0) {
    buf_done += n;
}
if (n > 0 && n < buf_size) {
    buf_base += n;
    buf_size -= n;
    goto again;
}
return (n >= 0) ? buf_done : n;

}

...