gpt4 book ai didi

c - "Inappropriate file type or format"

转载 作者:行者123 更新时间:2023-11-30 17:49:34 25 4
gpt4 key购买 nike

我正在尝试添加一个具有 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;
}

最佳答案

title 只能在文件的开头出现一次。如果您要将文件附加到存档中,则只需为新文件写入 ar_hdr,然后是文件的内容。

所以你需要检查该文件是否已经存在。如果没有,并且您正在创建一个新存档,则需要先编写 title。如果确实存在,请跳过该步骤。由于您是以追加模式打开文件,因此您可以使用 lseek() 判断它是否是新文件:

off_t curpos = lseek(out_fd, SEEK_CUR, 0); // Get current position
if (curpos == 0) { // At beginning, it must be a new file
num_written = write(out_fd, ARMAG, SARMAG);
}

关于c - "Inappropriate file type or format",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17769963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com