理解标题tar的变量char size []

时间:2013-09-21 23:16:58

标签: c unix tar

我尝试创建一个函数来读取C上的.tar文件的每个头文件,当我打印头文件结构的字符大小时,它给出了“0000000016”字节。 但该文件是318字节,所以我不明白。

int             get_new_file(int fd, int fd_1, t_list point)
{
  long int      nb;
  char          *buff;
  int           size_buff;
  int           len;

  nb = strtol(point.header.size, NULL, 8);
  if ((buff = malloc(sizeof(*buff) * nb + 1)) == NULL)
    return (-1);
  if ((size_buff = read(fd, buff, nb)) <= 0)
    return (-1);
  if ((len = write(fd_1, buff, nb)) <= 0)
    return (-1);
  printf("%s\n", point.header.size); /* this give me 00000000616, is this a special base ? */
  printf("%d\n", strtol(point.header.size, NULL, 8)); /* and this 398 */
  len = (len - 512) * -1;
  if ((len = read(fd, buff, len)) <= 0)
    return (-1);
  bzero(buff, nb + 1);
  return (0);
}

和我的结构:

typedef struct  s_head
{
    char        name[100];
    char        mode[8];
    char        uid[8];
    char        gid[8];
    char        size[12];
    char        mtime[12];
    char        chksum[8];
    char        linkflag;
    char        linkname[100];
    char        magic[8];
    char        uname[32];
    char        gname[32];
    char        devmajor[8];
    char        devminor[8];
}               t_head;

typedef union   s_list
{
  char          tab[512];
  t_head        header;
}               t_list;

2 个答案:

答案 0 :(得分:0)

您使用的是libtar吗?

如果你尝试使用libtar,也许你可以这样做。

http://www.feep.net/libtar/

答案 1 :(得分:0)

好吧我发现它只是在基数10上自动转换,因此00000000在基础8上