2 #define _XOPEN_SOURCE_EXTENDED
11 #include <sys/syscall.h>
14 #include <sys/select.h>
15 #include <sys/resource.h>
16 #include <sys/mount.h>
39 char lineread[BUFSIZE];
40 char command[BUFSIZE];
42 char * lock_file="/var/run/umts_lock";
46 char * vsys_in="/vsys/umts_backend.in";
47 char * vsys_out="/vsys/umts_backend.out";
50 char lineread[BUFSIZE];
52 int main(int argc, char **argv, char **envp){
55 printf("Usage: umts <cmd> [ argument ]\n");
60 strcpy(command, argv[1]);
64 strcat(command, argv[2]);
67 strcat(command, "\n");
69 int lock_fd=open(lock_file,O_WRONLY|O_CREAT);
72 printf("Error in creating lock file %s. Are you root of the slice?\n", lock_file);
77 if (flock(lock_fd, LOCK_EX | LOCK_NB)){
78 if (errno == EWOULDBLOCK){
79 printf("An operation is already being performed.\n");
82 } else if (errno == EBADF){
83 printf("Error in lock file: 1\n");
87 printf("Error in lock file: 2\n");
93 vfd0 = open(vsys_out, O_RDONLY | O_NONBLOCK);
95 printf("Opened %s\n", vsys_out);
98 vfd1 = open(vsys_in, O_WRONLY);
100 printf("Opened %s\n", vsys_in);
104 if (vfd0 == -1 || vfd1 == -1) {
105 printf("Error opening vsys umts entry.\n");
109 write(vfd1, command, strlen(command));
115 ret = select(vfd0+1, &set, NULL, NULL, NULL);
116 ret=read(vfd0,lineread,2048);
117 if (strstr(lineread,"EOF")) break;
119 write(1,lineread,ret);
127 flock(lock_fd, LOCK_UN);