Доброго времени суток. Необходимо написать прогу, которая читая из файла запускает то, что там написано с заданной задержкой(также указывается в файле). Злой преп, выпендрился и вписал в тот файл саму прогу, мне надо чтоб она ее на запускала, проверка на имя его не устраивает, он хочет, чтобы проверили контрольные суммы двух файлов(типа с одним названием файлы разные бывают)и только в случае совпадения не выполнять элемент из списка.
Есть ли какие библиотеки с такими функциями или исходник функции подсчета как-то достать можно?
Решено: Контрольные суммы файлов (Как реализовать подсчет?)
Модератор: Модераторы разделов
-
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Решено: Контрольные суммы файлов
а писать на чем угодно?)
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Решено: Контрольные суммы файлов
А запустить просто md5sum - нельзя? Алгоритм собственно из исходников этой проги можно взять. Можно простенький CRC32 сделать. Пример хоть в википедии взять можно.
PS а если я там пропишу скрипт, который Вашу прогу запускает? Как по мне, так лучше использовать проверку, а не запущена ли уже такая программа, а не контрольные суммы. Подумайте о семафорах, создании лок-файла или ещё чего-то подобного. Это способ получше.
PS а если я там пропишу скрипт, который Вашу прогу запускает? Как по мне, так лучше использовать проверку, а не запущена ли уже такая программа, а не контрольные суммы. Подумайте о семафорах, создании лок-файла или ещё чего-то подобного. Это способ получше.
-
- Сообщения: 12
- ОС: Mandriva Linux 2008
Re: Решено: Контрольные суммы файлов
Писать на Си
Как по мне, так лучше использовать проверку, а не запущена ли уже такая программа, а не контрольные суммы. Подумайте о семафорах, создании лок-файла или ещё чего-то подобного. Это способ получше.
Преп сказал реализовать именно так.
Как по мне, так лучше использовать проверку, а не запущена ли уже такая программа, а не контрольные суммы. Подумайте о семафорах, создании лок-файла или ещё чего-то подобного. Это способ получше.
Преп сказал реализовать именно так.
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Решено: Контрольные суммы файлов
Дело Ваше

-
- Сообщения: 12
- ОС: Mandriva Linux 2008
Re: Решено: Контрольные суммы файлов
хочу запустить на исполнение прогу на коммандном интерпритаторе, но не выходит.
делаю через exec никакого эффекта. Можно ли как-то откомпилировать такую прогу7
делаю через exec никакого эффекта. Можно ли как-то откомпилировать такую прогу7
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Решено: Контрольные суммы файлов
Объясните поподробней. Ничего не понятно: какие цели у программы? Что запускает программа: сценарии на баше, исходники, или что-то еще?
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 12
- ОС: Mandriva Linux 2008
Re: Решено: Контрольные суммы файлов
Программа должна была читать из файла и запускать команды с задержкой, которая так же была указана в файле. Хитрый преп в список вписывал саму прогу, ну и тогда машина висла. Реализовал через переменные окружения(не так как хотел преп, но надежней и короче, может оценит), контекст подменял через execvp. Все прекрасно заработало. Всем Спасибо за ответы
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Решено: Контрольные суммы файлов
Хм, интересно, если в задания крона вписать сам крон, что будет?
Насчет проверок того, запущена ли уже какая-нибудь программа, можно сделать так:
Код: Выделить всё
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <signal.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <getopt.h>
#include <pwd.h>
#define PROC_BASE "/proc"
void readname(char *name, pid_t pid){ // считать имя процесса из /proc/...
char *pp = name, byte, path[256];
int cntr = 0, file;
sprintf (path, PROC_BASE "/%d/cmdline", pid);
file = open(path, O_RDONLY);
do{ // считываем имя без слешей
read(file, &byte, 1);
if (byte != '/') *pp++ = byte;
else pp = name;
}
while(byte != EOF && byte != 0 && cntr++ < 255);
close(file);
}
void killbrothers(){
DIR *dir;
struct dirent *de;
pid_t pid, self;
char name[256], myname[256];
if (!(dir = opendir (PROC_BASE))){ // открываем директорию /proc
perror (PROC_BASE);
exit (1);
}
self = getpid(); // свой идентификатор
readname(myname, self); // свое имя процесса
while ((de = readdir (dir)) != NULL){ // пока не дойдем до конца директории
// пропустим, если директория не указывает на процесс, или указывает на self
if (!(pid = (pid_t) atoi (de->d_name)) || pid == self)
continue;
readname(name, pid); // считываем имя процесса
if(strncmp(name, myname, 255) == 0){ // если оно совпадает с self
#ifdef __TEST__
fprintf(stderr, "Found running process...\nKilling\n");
#endif
kill(pid, 9); // убиваем без разговоров
sleep(3); // подождем, пока процесс не умрет окончательно
}
}
closedir(dir);
}
Соответственно, kill(pid, 9) можно заменить на что-либо другое.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

Спасибо сказали: