LINUX.ORG.RU

Сишные функции для работы с usb, cd/dvd.

 , ,


0

1

Здравствуйте. Полным-полно существует информации по работе с usb, cd, dvd, но везде задействуется командная строка. Мне же нужны функции именно на Си для:

1)монтирования 2)размонтирования 3)записи на 4)чтения из устройства.

В bash это 1)mount 2)umount 3) growisofs и 4) cp /mnt/cdrom/cddvd.iso /dev/null или dd if=/dev/cdrom of=/dev/null

В Си функции будут те же самые или другие? Для монтирования - размонтирования я обнаружил, что используется одна и та же функция mount (const char *special_file, const char *dir, const char *fstype, unsigned long int options, const void *data).

Но для остальных точной информации не нашел. Буду весьма признателен, если поделитесь своими знаниями по теме.

Сознавайся что задумал, т.к. это полная каша.

cp /mnt/cdrom/cddvd.iso /dev/null

Чего?

arturpub ★★ ()
Ответ на: комментарий от arturpub

заменяет специальный файл устройства файлом образа диска, чего непонятного

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

И да, подсказка: на русском искать почти бесполезно, на английском стоит дописывать что-то вроде «c example».

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

Ты сам пробовал это дело исполнять?

anonymous ()
#include <stdio.h>
#include <unistd.h>

void main() {
    char *name[] = {
        "/bin/bash",
        "-c",
        "echo 'Hello World'",
        NULL
    };
    execvp(name[0], name);
}

Не забудь, что execvp заместит процесс бинаря, поэтому делай fork, если нужно запустить несколько.

sambist ★★ ()
Последнее исправление: sambist (всего исправлений: 2)
Ответ на: комментарий от ck114

Что тут гуглить? Как вызвать execve(«growisofs», ...), opendir(«/mnt/cdrom») или open(«/dev/cd0»)?

arturpub ★★ ()
Ответ на: комментарий от sambist

Я знаю, что в Qt могу написать как-то так: 1) QProcess *proc = new QProcess; 2) process->addArgument(«some_bash_command»); 3) proc->start();

Но я покамест ищу решения в очищенном от bash виде. Просто эти функции, которые ищу, будут запускаться в потоке. Т.е в итоге получится запуск процесса из потока, и мне еще надо будет слать сигналы из этого процесса в самый главный поток. В принципе это тоже можно сделать : connect(proc, SIGNAL(processExited()), this, SLOT(some_function()));

Но если можно упростить и не запускать процесс - почему бы не упростить.

alexey_linux ()

man 2 mount

man 2 open

man 2 read

man 2 write

man 2 close

man 2 umount

а вот с growisofs похоже печаль или копипаста.

sergej ★★★★★ ()
Ответ на: комментарий от sambist

долго разбирал, какая-то реально непонятная задача у него, реально это для каких устройств-то!?

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