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>
41 char lineread[BUFSIZE];
42 char command[BUFSIZE];
44 char * lock_file="/var/run/umts_lock";
48 char * vsys_in="/vsys/umtsd.in";
49 char * vsys_out="/vsys/umtsd.out";
52 char lineread[BUFSIZE];
54 int main(int argc, char **argv, char **envp){
57 printf("Usage: umts <cmd> [ argument ]\n");
62 strcpy(command, argv[1]);
66 strcat(command, argv[2]);
69 strcat(command, "\n");
71 int lock_fd=open(lock_file,O_WRONLY|O_CREAT);
74 printf("Error in creating lock file %s. Are you root of the slice?\n", lock_file);
79 if (flock(lock_fd, LOCK_EX | LOCK_NB)){
80 if (errno == EWOULDBLOCK){
81 printf("An operation is already being performed.\n");
84 } else if (errno == EBADF){
85 printf("Error in lock file: 1\n");
89 printf("Error in lock file: 2\n");
95 vfd0 = open(vsys_out, O_RDONLY | O_NONBLOCK);
97 printf("Opened %s\n", vsys_out);
100 vfd1 = open(vsys_in, O_WRONLY);
102 printf("Opened %s\n", vsys_in);
106 if (vfd0 == -1 || vfd1 == -1) {
107 printf("Error opening vsys umts entry.\n");
111 write(vfd1, command, strlen(command));
117 ret = select(vfd0+1, &set, NULL, NULL, NULL);
118 ret=read(vfd0,lineread,2048);
119 if (strstr(lineread,"EOF")) break;
121 write(1,lineread,ret);
129 flock(lock_fd, LOCK_UN);