LINUX.ORG.RU

W. Керриск LINUX API ИСЧЕРПЫВАЮЩЕЕ РУКОВОДСТВО. Задача из главы 5.14 (5.3).

 


0

2

W. Керриск LINUX API ИСЧЕРПЫВАЮЩЕЕ РУКОВОДСТВО. Задача из главы 5.14 (5.3)

Запустите

$ atomic_append f1 1000000 & atomic_append f1 1000000

Повторите те же действия, ведя запись в другой файл, но на этот раз с указанием аргумента x.

$ atomic_append f2 1000000 x & atomic_append f2 1000000 x

[b]Выведите на экран размеры файлов f1 и f2, воспользовавшись командой ls -l, и объясните разницу между файлами.[/b]

Я значит всё это выполнил и не понял, почему размер файлов разный… Помогите, плиз. [code=C] #include <fcntl.h> // open #include <stdio.h> // printf #include <errno.h> #include <unistd.h> // read #include <string.h> // strcmp #include <stdlib.h> // ERROR_SUCCESS #include «error_functions.h»

int main(int argc, char *argv[]) { int fd; char *buf; #define BUF_SIZE 1024 int len;

if (strcmp(argv[1], "--help") == 0)
	usageErr("%s filename bytes [x]", argv[0]);

if (argc == 4 && strcmp(argv[3], "x") == 0) {	
	fd = open(argv[1], O_WRONLY);
	if (fd == -1 && errno != ENOENT)
		errExit("open");
	else {	
		fd = open(argv[1], O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
                    if (fd == -1)
                    	errExit("open");
	}
}
else { 
	fd = open(argv[1], O_WRONLY | O_APPEND);
	if (fd == -1)
		errExit("open");		
}

len = atoll(argv[2]);	

int zCount= len % 1024;
for (int i = 0; i < len / BUF_SIZE; ++i) {
	if (lseek(fd, 0, SEEK_END) == -1)
		errExit("lseek");

	buf = malloc(BUF_SIZE);
	if (buf == NULL) {
		errExit("malloc");
	}

	if (write(fd, buf, BUF_SIZE) == -1) {
		errExit("write");	
	}

	free(buf);
	buf = NULL;
}

buf = malloc(len%BUF_SIZE);
if (buf == NULL) {
	errExit("malloc");
}

if (write(fd, buf, len%BUF_SIZE) == -1) {
	errExit("write");	
}
free(buf);

exit(EXIT_SUCCESS);

} [/code]



Последнее исправление: brynzacom (всего исправлений: 3)

Я значит всё это выполнил и не понял, почему размер файлов разный… Помогите, плиз.

Это значит, что ты провалил контрольное задание. Перечитай главу ещё раз.

LamerOk ★★★★★
()

Такую простыню читать жуть. Ты бы либо оформил правильно с подсветкой в блоке кода, либо иди ИИ мучай, я вглядываться что там у тебя даже не хочу.

peregrine ★★★★★
()

Ответ на твой вопрос написан в главе что ты читал вся глава 5 про это, особенно начало, особенно его название.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от MKuznetsov

Ты сейчас насоветуешь. У новичков по умолчанию маркдаун, а там надо другое руководство читать.

https://www.linux.org.ru/help/markdown.md

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от firkax

Давайте не будем дедовщину тут разводить.
Человек пытается сишку освоить, нет бы порадоваться и помочь…

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)

Я подумал, и прикинул, что вся разница только в отсутствии(присутствии) флага O_APPEND… Может, всё дело в реализации этого флага.

brynzacom
() автор топика
Ответ на: комментарий от hobbit

Ты сейчас насоветуешь. У новичков по умолчанию маркдаун, а там надо другое руководство читать.

LOR-code это наше местное, неповторимо единственное, посконно-исконное, скрепное ;-)

PS/ а маркдаун лишь дань моде и со множеством вариаций. Кстати и Линус наш солнце-Торвальдс не пишет в markdown.

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)

а можно пропросить сведущих людей рассказать что меняется при прмменение x в команде :)
понятно меняются флаги потока записи…

pfg ★★★★★
()
  O_APPEND
        The  file is opened in append mode.  Before each write(2), the file
        offset is positioned at the end of the file, as if  with  lseek(2).
        The  modification  of  the  file offset and the write operation are
        performed as a single atomic step.
i-rinat ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария