LINUX.ORG.RU

Сообщения kold2015

 

перехват open

Форум — Development

Здравствуйте создал библиотеку для перехвата 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
()

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

Форум — Development

Всем привет кто знает как скомпилировать данный модуль ядра в МСВС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
()

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

Форум — Development

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

я набросал такой проект основанный на 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

Форум — Development

Здравствуйте пишу 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

Форум — General

Здравствуйте использую 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

Форум — General

здравствуйте создал 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

Форум — General

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

файл конфига 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 и антенны

Форум — General

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

 , ,

kold2015
()

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

Форум — Development

Здравствуйте есть клиент сервер смысл в том что при подключении клиента к серверу(запускается отдельный поток) начинается копирование файла на сторону клиента вопрос в следующем возможно ли сделать так чтобы если запустить одновременно много клиентов(допустим 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-hardware

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

 ,

kold2015
()

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

Форум — Development

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

 

kold2015
()

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

Форум — Development

здравствуйте появилась необходимость использовать библиотеку 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

Форум — Development

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

 , ,

kold2015
()

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

Форум — Development

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

 ,

kold2015
()

смещение volume deskriptor

Форум — Development

здравствуйте вообщем нужно корректно научиться получать идентификатор тома 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
()

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

Форум — Development

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

#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

Форум — General

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

 , ,

kold2015
()

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

Форум — General

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

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

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

 ,

kold2015
()

вопрос по growisofs

Форум — General

здравствуйте подскажите как запустить под пользователем утилиту 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

Форум — General

Здравствуйте появился вопрос по 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 подписка на новые темы