LINUX.ORG.RU

g_file_copy, g_file_move - остановка операции на время


0

2

Привет всем!!! Товарищи, можно ли каким нибудь образом делать паузу, при использовании функций g_file_copy и g_file_move с последующим возобновлением. GCancellable на сколько я понял только полностью завершает копирование, хотя в документации написано, что ф-ия g_cancellable_reset, возвращает процесс в состояние до вызова g_cancellable_cancel. Но на деле она воздействия никакого не оказывает, операция не возобновляется


Ответ на: комментарий от anonymous

А можно чуть по подробней, на сколько я знаю fork() запускает полностью копию процесса, у меня функция выполняются в отдельном потоке, в другом потоке окно, которое отображает индикаторы и кнопку отмены, хочу добавить кнопку паузы в случае если процессор будет сильно загружаться при нескольких задачах.

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

Наверное, можно без таких костылей, но раз кул-программеры не появились:

#define _POSIX_C_SOURCE 2

#include <gtk/gtk.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>

void callback(goffset a, goffset b, gpointer c) { printf("%li %li\n", a, b); }

int main(int argc, char **argv)
{
	gtk_init(&argc, &argv);

	pid_t p;
	char flag = 1;

	if ((p = fork()) > 0) {
		puts("parent");
		for (;;) {
			sleep(4);
			if (flag)
				kill(p, SIGSTOP), puts("stopped");
			else
				kill(p, SIGCONT), puts("started");
			flag ^= 1;
		}
	}
	else {
		if (p < 0) { puts("fork failed"); return 1; }
		puts("child");

		GError *e = NULL;
		GFile *s = g_file_new_for_path("/mnt/111");
		GFile *d = g_file_new_for_path("/mnt/222");

		g_file_copy(s, d,
			G_FILE_COPY_NOFOLLOW_SYMLINKS | G_FILE_COPY_ALL_METADATA,
			NULL, callback, NULL, &e);
	}

	return 0;
}
Проверку ошибок и тп добавишь сам.

uzbl
()

пиши свое, проще будет

ananas ★★★★★
()

А что, простенькое копирование при помощи read/write и перемещение при помощи link (или тех же read/write, если файлы на разных разделах) уже не в почете?

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.