помощь в доработке программы на Си
Добавлено: Вт ноя 03, 2015 10:12 pm
Ребята, я тут делаю один модуль для cyberwrt и нужна помощь, т.к. в Си очень плохо разбираюсь.
Это будет модуль для сетевого сканера штрих-кодов.
В общем, есть программа с именем barcode. Запускается так:
Она подключается к HID-устройству (в частности сканер штрих-кодов) и выводит отсканированный код. Всё отлично работает, но мне нужно, чтобы вторым параметром была команда, которая будет вызвана после сканирования и которой будет передан код в качестве аргумента. Например, чтобы работал такой вызов:
Текущий исходный код barcode.c:
Т.е. мне нужно, чтобы в этом коде формировалась строка и запускалась моя программа в этом месте:
В общем, если кто может помочь, то буду весьма признателен.
Это будет модуль для сетевого сканера штрих-кодов.
В общем, есть программа с именем barcode. Запускается так:
Код: Выделить всё
./barcode /dev/input/event0
Код: Выделить всё
./barcode /dev/input/event0 /var/www/myscript.sh
barcode.cПоказать
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/input.h>
#define KEY_PRESS 1
#define KEY_KEEPING_PRESSED 2
int main (int argc, char *argv[])
{
struct input_event ev[64];
int fd, rd,size = sizeof (struct input_event);
char name[256] = "Unknown",i;
char *device = NULL;
char decode_scancode[]={0,0,1,2,3,4,5,6,7,8,9,0};
if (argv[1] == NULL){
printf("Please enter path to device\n");
return 1;
}
if ((getuid ()) != 0)
printf ("You must be as root for correct work!\n");
if (argc > 1)
device = argv[1];
if ((fd = open (device, O_RDONLY)) == -1){
printf ("Open error of device %s\n", device);
return 1;
}
ioctl (fd, EVIOCGNAME (sizeof (name)), name);
printf ("Reading From : %s (%s)\n", device, name);
while (1){
if ((rd = read (fd, ev, size * 64)) < size){
perror ("Read error");
return 1;
}
for (i=0; i< ((int)(rd/size)); i++) {
if (ev[i].type == EV_KEY) {
if ((ev[i].value == KEY_PRESS) || (ev[i].value == KEY_KEEPING_PRESSED)) {
if (ev[i].code < 12) {
printf ("%d", (decode_scancode[ev[i].code]));
}
else if (ev[i].code == 28) {
printf ("\n");
}
}
}
}
}
return 0;
}
Код: Выделить всё
... if (ev[i].code == 28) {
printf ("\n");
(здесь выводим строку и запускаем программу с аргументом)
}