Пользователь должен ввести некоторые имена файлов в командной строке, и программа будет читать каждое имя файла из массива argv[]
. Я должен выполнить проверку ошибок и т. Д.
Я хочу прочитать каждое имя файла. Например, если argv [2] равно «myfile.txt», программа должна прочитать содержимое «myfile.txt» и сохранить значение в char buffer[BUFSIZ]
, а затем записать содержимое buffer
в другой файл.
Однако перед тем, как содержимое будет написано, программа должна также написать имя файла и его размер. Такой, что файл может быть легко извлечен позже. Немного похоже на функцию tar
.
Файл, в который я записываю содержимое buffer
, в зависимости от количества файлов, добавленных пользователем, должен иметь вид строки:
myfile.txt256Thisisfilecontentmyfile2.txt156Thisisfile2content..............
Мой вопрос
1) Как записать значение argv[2]
в файл с помощью оператора write()
, так как возникают проблемы при записи массива char, что я должен поместить в (sizeof (?)) Внутри write()
, см. ниже, поскольку я не знаю длину имени файла, введенного пользователем.
2) Должен ли я использовать '&', чтобы записать целое значение в файл после имени, например записать 4 байта после имени файла для размера файла
Вот код, который я написал,
char buffer[BUFSIZ];
int numfiles=5; //say this is no of files user entered at command
open(file.....
lseek(fdout, 0, SEEK_SET); //start begging of file and move along each file some for loop
for(i=0-; ......
//for each file write filename,filesize,data....filename,filesize,data......
int bytesread=read(argv[i],buffer,sizeof(buffer));
write(outputfile, argv[i], sizeof(argv)); //write filename size of enough to store value of filename
write(outputfile, &bytesread, sizeof(bytesread));
write(outputfile, buffer, sizeof(buffer));
Но код работает не так, как я ожидал.
Есть предложения?