LINUX.ORG.RU

Сообщения kold2015

 

перехват open

Здравствуйте создал библиотеку для перехвата open

#include <stdio.h>
#include <string.h>
#include <dlfcn.h>
#include <fcntl.h>

#ifndef RTLD_NEXT
#define RTLD_NEXT ((void *) -1l)
#endif /* RTLD_NEXT */


int open(const char *filename, int flags, mode_t mode)
{
    if (strstr(filename,"/openlog")==NULL)
    {
        char buf[256];
        FILE *f=fopen("/openlog","a");
        if (f!=NULL)
        {
            sprintf(buf,"файл %s успешно открыт",filename);
            fwrite(buf,sizeof(buf),1,f);
        }
        fclose(f);
    }

    int (*open_orig)(const char *filename,int flags,mode_t mode)=(int (*)(const char*, int, mode_t))dlsym(RTLD_NEXT, "open");
    return open_orig(filename, flags, mode);
}
начинаю компилировать
[root@maks mylib]# gcc -fPIC -c -Wall main.cpp
[root@maks mylib]# gcc -shared main.o -ldl -o main.so

устанавливаю LD_PRELOAD

[root@maks mylib]# LD_PRELOAD="main.so" /usr/bin/mc
но у меня появляется вот это
ERROR: ld.so: object 'main.so' from LD_PRELOAD cannot be preloaded: ignored.

 

kold2015
()

компиляция модуля ядра

Всем привет кто знает как скомпилировать данный модуль ядра в МСВС5

#include <linux/module.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <asm/uaccess.h>

extern void *sys_call_table[];

int (*orig_open)(const char *pathname, int flag, int mode);

int own_open(const char *pathname, int flag, int mode)
{
    char *kernel_path;
    char hide[]="test.txt";
    kernel_path=(char *)kmalloc(255,GFP_KERNEL);

    copy_from_user(kernel_path, pathname, 255);
    if(strstr(kernel_path,(char *)&hide) != NULL)
    {
	kfree(kernel_path);
	return -ENOENT;

    }
    else
    {
	kfree(kernel_path);
	return orig_open(pathname, flag, mode);

    }

}
int init_module()
{
    orig_open=sys_call_table[SYS_open];
    sys_call_table[SYS_open]=own_open;
    return 0;

}

void cleanup_module()

{
    sys_call_table[SYS_open]=orig_open;
}

 , ,

kold2015
()

Система контроля действия пользователя

Мне нужно разработать систему контроля действий пользователя которая отслеживала бы создание файла,изменение файла,удаление файла в корневом каталоге(«/») и во всех подкаталогах проще говоря по всей системе

я набросал такой проект основанный на api inotify

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/inotify.h>
#include <limits.h>

#define MAX_EVENTS 1024 /*Максимальное количество событий для обработки за один раз*/
#define LEN_NAME 16 /*Будем считать, что длина имени файла не превышает 16 символов*/
#define EVENT_SIZE  ( sizeof (struct inotify_event) ) /*размер структуры события*/
#define BUF_LEN     ( MAX_EVENTS * ( EVENT_SIZE + LEN_NAME )) /*буфер для хранения данных о событиях*/

int main( int argc, char **argv ) 
{
	int length, i = 0, wd;
	int fd;
	char buffer[BUF_LEN];

	 /* Инициализация Inotify*/
	fd = inotify_init();
	if ( fd < 0 ) {
		perror( "Couldn't initialize inotify");
	}

	
	wd = inotify_add_watch(fd, "/", IN_CREATE | IN_MODIFY | IN_DELETE); 

	if (wd == -1)
	{
		printf("Couldn't add watch to %s\n",argv[1]);
	}
	else
	{
		printf("Watching:: %s\n",argv[1]);
	}

	/* бесконечный цикл*/
	while(1)
	{
		i = 0;
		length = read( fd, buffer, BUF_LEN );  

		if ( length < 0 ) {
			perror( "read" );
		}  

		while ( i < length ) {
		struct inotify_event *event = ( struct inotify_event * ) &buffer[ i ];
		if ( event->len ) {
			if ( event->mask & IN_CREATE) {
				if (event->mask & IN_ISDIR)
					printf( "The directory %s was Created.\n", event->name );       
				else
					printf( "The file %s was Created with WD %d\n", event->name, event->wd );       
			}

			if ( event->mask & IN_MODIFY) {
				if (event->mask & IN_ISDIR)
					printf( "The directory %s was modified.\n", event->name );       
				else
					printf( "The file %s was modified with WD %d\n", event->name, event->wd );       
			}
          
			if ( event->mask & IN_DELETE) {
				if (event->mask & IN_ISDIR)
					printf( "The directory %s was deleted.\n", event->name );       
				else
					printf( "The file %s was deleted with WD %d\n", event->name, event->wd );       
			}  


				i += EVENT_SIZE + event->len;
			}
		}
	}

 /* Освобождение ресурсов*/
inotify_rm_watch( fd, wd );
close( fd );

return 0;
}
Собственно вопрос а можно как-нибудь сделать чтобы наблюдение было не только в корне но и во всех вложенных каталогах(те грубо говоря по всей системе) я так понял нужно реализовать рекурсию... но ведь по всей системе может быть 10-ки тысяч каталогов или даже сотни

 

kold2015
()

проблема с методом get класса qftp

Здравствуйте пишу ftp клиент... сервер у меня vsftpd проблема заключается в следующем у меня почему то не скачивается файл с помощью метода get(вернее сказать так скачивается НО ОН ПУСТОЙ) вот привожу код

файл main.cpp

#include <QCoreApplication>
#include <myftp.h>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    myftp ftp;
    ftp.connectserver();  //конекчусь к серверу
    ftp.poluc(QString(""));  //
    return a.exec();
}

Файл myftp.h

ifndef MYFTP_H
#define MYFTP_H

#include <QObject>
#include <QFtp>
#include <QUrlInfo>
#include <iostream>
#include <QFileInfo>
#include <QDir>

class myftp : public QObject
{
    Q_OBJECT
public:
    explicit myftp(QObject *parent = 0);
    QFtp a;
    QString ipadreess;
    QString port;
    QString login;
    QString parol;
    QString papka;
signals:

public slots:
    void connectserver(); // ÐÏÄËÌÀÞÅÎÉÅ Ë ÓÅÒ×ÅÒÕ
    void poluc(QString);
    void setip(QString);
    void loginparol(QString,QString);
    void poluchob(QUrlInfo);  //ÐÏÌÕÞÅÎÉÅ ÆÁÊÌÁ ÉÌÉÐÁÐËÉ ÎÁÈÏÄÑÝÉÓÑ × ÚÁÄÁÎÎÏÊ ÄÉÒÅËÔÏÒÉÉ
    void poluchif(int);
    void ustanpapka(QString);
    void kk(int,bool);



};

#endif // MYFTP_H

Файл myftp.cpp

#include "myftp.h"
myftp::myftp(QObject *parent) :
    QObject(parent)
{
connect(&a,SIGNAL(listInfo(QUrlInfo)),this,SLOT(poluchob(QUrlInfo)));
}


void myftp::connectserver()
{
     std::cout<<"ÚÁÛÅÌ × ËÏÎÎÅËÔ="<<std::endl;
    a.connectToHost(QString("10.4.13.65"));
    a.login(QString("root"),QString("12345678"));


}
void myftp::poluc(QString ppka)
{
    a.cd(QString("ttt"));
    a.list();

}

//ÐÏÌÕÞÁÅÍ ÉÍÑ ËÁÖÄÏÇÏ ÆÁÊÌÁ × ÐÁÐËÅ
void myftp::poluchob(QUrlInfo url)
{


  QString fail=url.name();

  QString outfail="/papkatest/"+url.name();

  QFile g(outfail);
  if (g.open(QIODevice::WriteOnly)) 
  {

      a.get(fail,&g,QFtp::Binary);
  }
  //a.close();
  g.close();

}

void myftp::poluchif(int r)
{
    std::cout<<QString(r).toStdString()<<std::endl;
}

void myftp::kk(int a,bool ok)
{

}

void myftp::setip(QString ip)
{
    ipadreess=ip;
}


void myftp::loginparol(QString log,QString par)
{
    login=log;
    parol=par;
}


void myftp::ustanpapka(QString p)
{
    papka=p;
}
в чем может быть проблема что файл пустой.... хотя источник который я качаю с сервера не пустой... использую qt 4.8

 ,

kold2015
()

curl+vsftpd

Здравствуйте использую vsftpd а в качестве клиента curl вот конфиг сервера vsftpd.conf

anonymous_enable=YES
no_anon_password=YES
write_enable=YES
listen=YES
local_enable=YES
local_umask=022
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
anon_root=/server/ftp
local_root=/server/ftp
anon_upload_enable=YES
anon_mkdir_write_enable=YES
max_clients=10000
pam_service_name=vsftpd
listen_address=10.4.13.65
listen_port=7070
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
rsa_cert_file=/etc/cups/private/vsftpd.pem
rsa_private_key_file=/etc/cups/private/vsftpd.pem


ssl_enable=YES

allow_anon_ssl=YES

force_local_data_ssl=YES

force_local_logins_ssl=YES


ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO


#require_ssl_reuse=NO
#ssl_ciphers=HIGH
пытаюсь подключиться к серверу через curl командой
 curl --user "root:12345678" ftps://192.168.160.135 
но выдается ошибка
Curl Error: 35 - error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
что может быть?

 ,

kold2015
()

как использовать tls в wget

здравствуйте создал vsftpd сервер вот с такой конфигурацией vsftpd.conf

anonymous_enable=YES
no_anon_password=YES
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

rsa_cert_file=/etc/cups/ssl/vsftpd.pem
rsa_private_key_file=/etc/cups/ssl/vsftpd.pem

ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

#require_ssl_reuse=NO
#ssl_ciphers=HIGH

local_enable=YES
write_enable=NO
local_umask=022



dirmessage_enable=YES

xferlog_enable=YES
connect_from_port_20=YES
#listen_port=7010
listen_address=192.168.160.135
listen=YES
anon_root=/23ctber
local_root=/23ctber
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES

потом я создал сертификат и ключ сервера командой

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
в одном файле у меня ключ и сертификат

клиент как бы находится на той же машине что и сервер

я создал сертификат и ключ клиента командой

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd1.pem -out /etc/ssl/private/vsftpd1.pem
далее я попытался скачать папку с сервера командой
wget --secure-protoc=TLSv1 --no-check-certificate --certificate=/etc/ssl/vsftpd1.pem --private-key=/etc/ssl/vsftpd1.pem -r -nH -P /max ftp://root:12345678@192.168.160.135/managizmen
но он мне написал вот это

устанавливается соединение с 192.168.160.135.... соединение установлено
Выполняется вход под именем root...
Сервер отклонил логин.
Повтор.

что я делаю не так... мне нужно скачать папку/файл через защищенное соединение

 , , , ,

kold2015
()

настройка VSFTPD на МСВС 5.7

настраиваю сервер вот таким конфигом

файл конфига vsftpd.conf

#разрешаем анонимусам
anonymous_enable=YES

pasv_min_port=30000

connect_from_port_20=YES

pasv_max_port=30999

local_enable=YES

tcp_wrappers=YES

listen=YES

max_clients=2000

max_per_ip=4

listen_port=20

listen_address=127.0.0.1

userlist_enable=YES

userlist_deny=NO

userlist_file=/etc/vsftpd/user_list

anon_root=/server/ftp

файл host.allow

vsftpd: 10.4.13.33
vsftpd: 127.0.0.1

host.deny

vsftpd: ALL

содержанние user_list

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

проблема в том что когда я подключаюсь к серверу ftp 127.0.0.1 пишет connection refused в чем может быть проблема?

 ,

kold2015
()

вопрос по NMEA и антенны

здравствуйте есть устройство усв3(для синхронизации координат и времени) через ком порт. Использует протокол NMEA.Есть ПО только под windows. http://www.sicon.ru/prod/oborud/?base=4&news=1 Под windows я получаю все посылки нормально. Проблема заключается в том что когда я linux( мсвс) вывожу данные с ком порта в файл cat /Dev/ttyS0>>/test бывают не читаемые символы(кракозябры) в документации написано что нужно 9600/8N1. Поставил такие параметры... кракозябры так и остались. Причем бывают кракозябры идут 5-10 минут а потом поступают нормальные посылки... Эксперементировал со скоростью эффекта никакого что может быть?

 , ,

kold2015
()

многопоточное копирование фала через сокет

Здравствуйте есть клиент сервер смысл в том что при подключении клиента к серверу(запускается отдельный поток) начинается копирование файла на сторону клиента вопрос в следующем возможно ли сделать так чтобы если запустить одновременно много клиентов(допустим 10-10 потоков ) файл копировался параллельно на все клиенты одновременно.

код сервера

#include <QCoreApplication>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <iostream>
#include <fcntl.h>
#include <pthread.h>
#include <QFile>
#include <QTime>
pthread_mutex_t s;
int i=0;
void* potokfunc(void* ps)  //начало потока функция
{
    int desk=*(int *)ps;
    char buf[100];  //отправка номера размера имени файла
    char buf2[2048]; //отправка данных файла
    pthread_mutex_lock(&s);
    i=i+1;
    pthread_mutex_unlock(&s);
 
 
    // ОТПРАВЛЯЕМ НОМЕР ПАПКИ
    sprintf(buf,"%d",i);
    printf("НОМЕР ПАПКИ=%s\n",buf);
    //sleep(1);
    int rez=send(desk,buf,strlen(buf),0);
    if (rez>0)
    {
        printf("номер папки отправлен \n");
    }
 
    memset(buf,0,sizeof(buf));  // очищаем буфер
 
    //ОТПРАВЛЯЕМ РАЗМЕР ФАЙЛА
    QFile a("/qqq");
    int razmer;
    razmer=rez=a.size();
    char *razmert=QString::number(rez).toLocal8Bit().data();
    //sleep(3);
    sprintf(buf,"%s",razmert);
    printf("РАЗМЕР ФАЙЛА=%s\n",buf);
    rez=send(desk,buf,strlen(buf),0);
    if (rez>0)
    {
        printf("размер файла отправлен\n");
 
    }
    memset(buf,0,sizeof(buf));  // очищаем буфер
    //ОТПРАВЛЯЕМ ИМЯ ФАЙЛА
    sprintf(buf,"%s","/qqq");
    printf("ИМЯ ФАЙЛА=%s\n",buf);
    //sleep(3);
    rez=send(desk,buf,strlen(buf),0);
    if (rez>0)
    {
        printf("имя файла отправлено \n");
 
    }
    //sleep(2);
    FILE *f=fopen(buf,"rb");
    if (f!=NULL)
    {
 
        while(!feof(f))
        {
            rez=fread(buf2,1,sizeof(buf2),f);
            if (rez>0)  // если данные в буфер передали
            {
                rez=send(desk,buf2,strlen(buf2),0);
                if (rez>0)
                {
                    razmer=razmer-rez;
                }
                if (razmer==0)  //весь файл считали
                {
 
                    break;
                }
            }
        }
    }
 
    return NULL;
 
 
 
}
 
int main(int argc, char *argv[])
{
    pthread_mutex_init(&s,0);
    int fd=socket(AF_INET,SOCK_STREAM,0);
    if (fd<0)
    {
        printf("ощибка создания сокета");
        return 0;
    }
    struct sockaddr_in sockad;
    struct sockaddr_in klient;
 
    sockad.sin_addr.s_addr=htonl(INADDR_ANY);
    sockad.sin_family=AF_INET;
    sockad.sin_port=htons(6643);
 
    int rez=bind(fd,(struct sockaddr *)&sockad,sizeof(sockad));
    if (rez<0)
    {
        printf("ошибка привязки");
        return 0;
    }
    rez=listen(fd,1000);
    if (rez<0)
    {
        printf("не готово принимать соединения\n");
        return 0;
    }
    printf("сервер запущен\n ЖДУ ПОДКЛЮЧЕНИЙ\n");
 
    while (1)
    {
        int len=sizeof(klient);
        int fda=accept(fd,(sockaddr *)&sockad,(socklen_t *) &len);
        if (fda>0)  //если произошло соединение
        {
            printf("произошло подключение создаю поток\n");
            pthread_t tid;  //создали объект потока
            int jj=pthread_create(&tid, NULL, &potokfunc, &fda);    //передаем связный файловый дескриптор
            if (jj!=0)
            {
                printf("поток не создан\n");
            }
            sched_yield();
        }
    }
 
 
 
 
    return 0;
}

код клиента

#include <QCoreApplication>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <iostream>
#include <fcntl.h>
#include <pthread.h>
#include <QFile>
#include <QTime>
#include <QDir>
#include <stdio.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    char buf[100];
    char buf2[2048];
    memset(buf,0,sizeof(buf));
    memset(buf2,0,sizeof(buf2));
 
    int fd=socket(AF_INET,SOCK_STREAM,0);
    if (fd<0)
    {
        printf("ощибка создания сокета\n");
 
    }
 
    struct sockaddr_in sock;
    sock.sin_addr.s_addr=htonl(INADDR_LOOPBACK);
    sock.sin_port=htons(6643);
    sock.sin_family=AF_INET;
 
    int rez=connect(fd,(sockaddr *)&sock,sizeof(sock));
    if (rez<0)
    {
        printf("ошибка коннекта\n");
        return 0;
    }
    //принимаем номер папки
    rez=recv(fd,buf,sizeof(buf),0);
    if (rez>0)
    {
        cout<<"НОМЕР ПАПКИ="<<buf<<endl;
        printf("номер папки получен\n");
    }
 
 
    QString papka="/1000ARM/"+QString(buf);
    cout<<papka.toStdString()<<endl;
    QDir a;
    a.mkdir("/1000ARM");
 
    if (a.mkdir(papka)==true)
    {
        printf("папка создана\n");
    }
 
    memset(buf,0,sizeof(buf));
    int razmer;
    //принимаем размер файла
    rez=recv(fd,buf,sizeof(buf),0);
    if (rez>0)
    {
        razmer=QString(buf).toInt();
        cout<<"РАЗМЕР ФАЙЛА="<<buf<<endl;
        printf("размер файла получен\n");
    }
 
    memset(buf,0,sizeof(buf));
 
    rez=recv(fd,buf,sizeof(buf),0);
    if (rez>0)
    {
        cout<<"ИМЯ ФАЙЛА="<<buf<<endl;
        printf("имя файла получено\n");
    }
 
    QString imyaf=papka+QString(buf);
    char *im=imyaf.toLocal8Bit().data();
    FILE *f=fopen(im,"wb");
    printf("\n");
    if (f!=NULL)
    {
        while(1)
        {
            memset(buf2,0,sizeof(buf2));
            rez=recv(fd,buf2,sizeof(buf2),0);
            if (rez>0)  //если мы получили данные
            {
                printf("данные получены=%s\n",buf2);
                rez=fwrite(buf2,1,rez,f); //данные записаны
                if (rez>0)  //если мы записали данные
                {
                     printf("получено байт=%d\n",rez);
                    razmer=razmer-rez;
                }
                if (razmer==0)
                {
                    printf("весь файл принят\n");
                    break;
                }
            }
        }
    }
 
 
 
 
    return 0;
}

 , ,

kold2015
()

настройка компорта

Здравствуйте подскажите как в linux через утилиту stty задать такие параметры порта 9600/8N1

 ,

kold2015
()

вопрос по архитектуре клиент-сервер

Здравствуйте. Параллельный сервер который должен одновременно отдать файл на 1000-2000 компьютеров одновременно должен писаться на чем на потоках ,на процессах, или еще на чем нибудь....?

 

kold2015
()

установка qt 3.3 на мсвс 5.7

здравствуйте появилась необходимость использовать библиотеку qt 3.3 на мсвс 5.7 подскажите.. делаю так

1)скачаваю qt 3.3 отсюда https://download.qt.io/archive/qt/3/ архив qt-x11-free-3.3.3.tar.bz2

2)запускаю файл configure вот лог установки

http://files.webfile.ru/1e294fdc0d512261e16e29d1df06be62

вот еще лог http://file.sampo.ru/2grz4n/

собственно а что делать дальше нужно и корректно ли все установилось?

 , , ,

kold2015
()

мсвс 3

здравствуйте подскажите какой qtcreator можно поставить по мсвс 3 r10?

 , ,

kold2015
()

определить пустой диск или на нем есть данные

Собственно вопрос как определить пустой диск или на нем есть данные?

 ,

kold2015
()

смещение volume deskriptor

здравствуйте вообщем нужно корректно научиться получать идентификатор тома cd диска в Linux чтоб он был такой же как и в windows я использую алгоритм

#include <stdio.h>

#define SEC_SIZE 2048
#define VD_N 16

unsigned cdid(unsigned char pvd[SEC_SIZE])
    {
    unsigned char part[4] = {0};
    int i;

    for(i = 0; i < SEC_SIZE; i += 4)
        {
        part[3] += pvd[i + 0];
        part[2] += pvd[i + 1];
        part[1] += pvd[i + 2];
        part[0] += pvd[i + 3];
        }

    return (part[3] << 24) + (part[2] << 16) + (part[1] << 8) + part[0];
    }

int main(int argc, char *argv[])
    {
    FILE *in;
    unsigned char buf[SEC_SIZE];

    if(argc != 2)
        {
        fprintf(stderr, "Call: cdid /dev/path\n");
        return 1;
        }

    /* Open device */
    in = fopen(argv[1], "rb");
    if(in == NULL)
        {
        perror(NULL);
        return 2;
        }

    /* Seek to primary volume descriptor */
    if(fseek(in, VD_N * SEC_SIZE, SEEK_SET) != 0)
        {
        perror(NULL);
        return 2;
        }

    /* Read descriptor */
    if(fread(buf, 1, SEC_SIZE, in) != SEC_SIZE)
        {
        perror(NULL);
        return 2;
        }

    /* Caclculate disc id */
    printf("%08X\n", cdid(buf));

    return 0;
    }


проблема в том что допустим:
1)берем пустой диск(сд болванку)
2)пишем на нее что-то
3)смотрим идентификатор тома вышеприведенной функцией
4)затем заходим в windows и смотрим командой dir идентификатор тома 
Они совпадают
5)потом еще дозаписываем какую нибудь информацию на диск
6)смотрим идентификатор тома вышеприведенной функцией(идентификатор тома остался  такой же)
7)смотрим идентификатор тома в windows он изменился
так вот идентификатор тома диска меняется после каждой дозаписи в windows
но как мне определить смещение в выше приведенной программе
чтобы каждый раз номера в windows и в программе совпадали...

 ,

kold2015
()

вопрос про запись на диски

Здравствуйте использую следующий алгоритм чтобы получить идентификатор тома диска

#include <stdio.h>

#define SEC_SIZE 2048
#define VD_N 16

unsigned cdid(unsigned char pvd[SEC_SIZE])
    {
    unsigned char part[4] = {0};
    int i;

    for(i = 0; i < SEC_SIZE; i += 4)
        {
        part[3] += pvd[i + 0];
        part[2] += pvd[i + 1];
        part[1] += pvd[i + 2];
        part[0] += pvd[i + 3];
        }

    return (part[3] << 24) + (part[2] << 16) + (part[1] << 8) + part[0];
    }

int main(int argc, char *argv[])
    {
    FILE *in;
    unsigned char buf[SEC_SIZE];

    if(argc != 2)
        {
        fprintf(stderr, "Call: cdid /dev/path\n");
        return 1;
        }

    /* Open device */
    in = fopen(argv[1], "rb");
    if(in == NULL)
        {#include <stdio.h>

#define SEC_SIZE 2048
#define VD_N 16

unsigned cdid(unsigned char pvd[SEC_SIZE])
    {
    unsigned char part[4] = {0};
    int i;

    for(i = 0; i < SEC_SIZE; i += 4)
        {
        part[3] += pvd[i + 0];
        part[2] += pvd[i + 1];
        part[1] += pvd[i + 2];
        part[0] += pvd[i + 3];
        }

    return (part[3] << 24) + (part[2] << 16) + (part[1] << 8) + part[0];
    }

int main(int argc, char *argv[])
    {
    FILE *in;
    unsigned char buf[SEC_SIZE];

    if(argc != 2)
        {
        fprintf(stderr, "Call: cdid /dev/path\n");
        return 1;
        }

    /* Open device */
    in = fopen(argv[1], "rb");
    if(in == NULL)
        {
        perror(NULL);
        return 2;
        }

    /* Seek to primary volume descriptor */
    if(fseek(in, VD_N * SEC_SIZE, SEEK_SET) != 0)
        {
        perror(NULL);
        return 2;
        }

    /* Read descriptor */
    if(fread(buf, 1, SEC_SIZE, in) != SEC_SIZE)
        {
        perror(NULL);
        return 2;
        }

    /* Caclculate disc id */
    printf("%08X\n", cdid(buf));

    return 0;
    }

Проблема в том что мне нужно чтобы идентификатор тома полученный с помощью данного алгоритма не менялся так вот идентификатор диска cd-rw не меняется после записи и последующих перезаписей а вот идентификатор диска dvd-rw -меняется при каждом цикле перезаписи. Диски dvd пишу growisofs что можно сделать чтобы идентифкатор полученный с помощью данного метода не менялся и на dvd дисках?

 ,

kold2015
()

вопрос про growisofs

Здравствуйте почему иногда возникает проблема с записью через утилиту growisofs пишет что /dev/scd1 doesn't look like isofs в чем может быть проблема? привод внешний... со внутреннего привода пишет нормально...

 , ,

kold2015
()

запуск growisofs из под root

Здравствуйте подскажите как запустить growisofs с правами супепользователя а то при запуске выдает

/usr/bin/growisofs is being executed under sudo,aborting

как сделаь чтобы можно было запускать из под sudo

 ,

kold2015
()

вопрос по growisofs

здравствуйте подскажите как запустить под пользователем утилиту growisofs

[polz@maks szi]$ /usr/bin/growisofs -M /dev/scd1 -J -jcharset koi8-r -r -hide-rr-moved -multi /home/polz/.tmp/0-0/otpravkanacdrom :-( unable to open64(«/dev/scd1»,O_RDONLY): Permission denied

[polz@maks szi]$ /usr/bin/sudo /usr/bin/growisofs -M /dev/scd1 -J -jcharset koi8-r -r -hide-rr-moved -multi /home/polz/.tmp/0-0/otpravkanacdrom :-( /usr/bin/growisofs is being executed under sudo, aborting! See NOTES paragraph in growisofs manual page for further details.

использую мсвс 5.7 через судо тоже не запускается файлы есть в папке

 

kold2015
()

вопрос по growisofs

Здравствуйте появился вопрос по growisofs... growisofs является оболочкой mkisofs если я правильно понял... вопрос в том что когда я формирую образ mkisofs я пишу ключ -V «имя метки тома сд диска» а как поступить с growisofs ? ведь судя по справке там нет такого ключа -V но там написано так growisofs [-dry-run] [-dvd-compat] [-overburn] [-speed=1] -[Z|M] /dev/dvd <mkisofs-options>

те я правильно понял что можно как то в growisofs указать метку тома....? ведь какая то часть ключей mkisofs должна поддерживаться....?

 ,

kold2015
()

RSS подписка на новые темы