在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;
}