0

ar_hdr 形式の新しいファイル メンバーを追加して、アーカイブの最後の要素の直後に配置しようとしています。コードはコンパイルされますが、ar -t コマンドでファイル名を表示しようとすると、次のようなエラー メッセージが表示されます: ar: hello.a: ファイルの種類または形式が不適切です。誰かが私のコードを見て、それを修正する方法についてのヒントを教えてもらえますか? ありがとう。

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/utsname.h>
#include <ctype.h>
#include <string.h>
#include <ar.h>

#define BLOCKSIZE 1

int main (int argc, char **argv)
{
    char *archive = argv[1];
    char *read_file = argv[2];

    int in_fd;
    int out_fd;

    char title[] = ARMAG;   //constant define in ar.h
    char buf[BLOCKSIZE];

    int num_read;
    int num_written;

    struct stat stat_file;
    struct ar_hdr my_ar;

    //open read_file (i.e., text file)
    if (stat(read_file, &stat_file) == -1){
        perror("Error in Stat");
        exit(-1);
    }

    //assign file info to struct dhr (my_ar)    
    sprintf(my_ar.ar_name, "%s", read_file);
    sprintf(my_ar.ar_date, "%ld", stat_file.st_mtimespec.tv_sec);
    sprintf(my_ar.ar_uid, "%i", stat_file.st_uid);
    sprintf(my_ar.ar_gid, "%i", stat_file.st_gid);
    sprintf(my_ar.ar_mode, "%o", stat_file.st_mode) ;
    sprintf(my_ar.ar_size, "%lld", stat_file.st_size) ;


    //0666 - open archive
    out_fd = open(archive, O_CREAT | O_WRONLY | O_APPEND, 0666);
    if (out_fd == -1) {
        perror("Canot open/create output file");
        exit(-1);
    }

    //write my_ar to archive
    num_written = write(out_fd, title, sizeof(title));
    num_written = write(out_fd, &my_ar, sizeof(my_ar));


    printf("\n");

    return 0;
}
4

2 に答える 2