Пример #1
0
int main(int argc, char *argv[]) {
	if (argc < 2) {
		_print_usage(argv[0]);
		exit(0);
	}

	/* The file we're going to load in: */
	const char *file_path = argv[1];
	/* Where we're going to store our loaded buffer: */
	char *buf = NULL;
	size_t buf_siz = 0;

	buf = lair_load_file(file_path, &buf_siz);
	if (buf == NULL) {
		error_and_die(ERR_RUNTIME, "Could not load file.");
		return 1;
	}

	int rc = lair_execute(buf, buf_siz);
	if (rc != 0) {
		error_and_die(ERR_RUNTIME, "Could not execute.");
		return 1;
	}

	lair_unload_file(buf, buf_siz);
	return 0;
}
Пример #2
0
CKMotionLocal::CKMotionLocal()
{
  int fd = shm_open(memname, O_CREAT | O_EXCL | O_RDWR, 0666);
  if (fd == -1){
    if(errno == EEXIST){
      fd = shm_open(memname, O_RDWR, 0666);
    }
    if (fd == -1){
      error_and_die("shm_open");
    }
  } else {
    if (ftruncate(fd, region_size) != 0){
      error_and_die("ftruncate");
    } else {
      //log_info("Success");
    }
  }

  ptr = mmap(0, region_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  if (ptr == MAP_FAILED) {
    error_and_die("mmap");
  }

  close(fd);

  sharePtr = (u_int32_t *) ptr;
  (*sharePtr)++;
}
Пример #3
0
void
create_directory(const char* path) {
	size_t length = strlen(path) + 2; //extra '/' and '\0'
	char path_copy[length];
	strcpy(path_copy, path);
	path_copy[length-2] = '/';

	char* sub_path = path_copy;
	while ((sub_path = strchr(sub_path, '/')) != NULL) {
		*sub_path = '\0';

		struct stat stat_buf;
		if (stat(path_copy, &stat_buf) != 0) {
			if (errno != ENOENT) { //we're just testing to see if the directory exists
				perror_and_die("stat() failed");
			}
		} else {
			if (!S_ISDIR(stat_buf.st_mode)) {
				error_and_die("create_directory: can't mkdir on *file* %s", path_copy);
			}
		}

		mkdir(path_copy, 0700);
		*(sub_path++) = '/';
	}
}
Пример #4
0
int main(int argc, char *argv[]) {
  int r;

  const char *memname = "sample";
  const size_t region_size = sysconf(_SC_PAGE_SIZE);

  int fd = shm_open(memname, O_CREAT | O_TRUNC | O_RDWR, 0666);
  if (fd == -1)
    error_and_die("shm_open");

  r = ftruncate(fd, region_size);
  if (r != 0)
    error_and_die("ftruncate");

  void *ptr = mmap(0, region_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  if (ptr == MAP_FAILED)
    error_and_die("mmap");
  close(fd);

  pid_t pid = fork();

  if (pid == 0) {
    u_long *d = (u_long *) ptr;
    *d = 0xdbeebee;
    exit(0);
  }
  else {
    int status;
    waitpid(pid, &status, 0);
    printf("child wrote %#lx\n", *(u_long *) ptr);
  }

  r = munmap(ptr, region_size);
  if (r != 0)
    error_and_die("munmap");

  r = shm_unlink(memname);
  if (r != 0)
    error_and_die("shm_unlink");

  return 0;
}
Пример #5
0
void device_set_flags(const char *ifname, const short flags)
{
	int ret, sock;
	struct ifreq ifr;

	sock = af_socket(AF_INET);

	memset(&ifr, 0, sizeof(ifr));
	strlcpy(ifr.ifr_name, ifname, IFNAMSIZ);

	ifr.ifr_flags = flags;

	ret = ioctl(sock, SIOCSIFFLAGS, &ifr);
	if (ret < 0)
		error_and_die(EXIT_FAILURE, "Cannot set NIC flags!\n");

	close(sock);
}
Пример #6
0
int main(int argc, char *argv[], char *envp[]){

	
	int err;
	int backlog = 100;

	//Thread stuff
	pthread_t tid;
	pthread_t tid_operator, tid_heartbeat; 

	// Shared Memory;
	int shmid;
    key_t key;
    int *shm;

    //Socket stuff
    struct sockaddr_in local_addr;
	struct sockaddr_in client_addr; 
	int socket_fd;
	int new_socket;
    int option=1;


    /* set handler for signal SIGINT */
    struct sigaction new_action;
    new_action.sa_handler = signal_handler;
    sigemptyset (&new_action.sa_mask);
    new_action.sa_flags = 0;
    sigaction (SIGINT, &new_action, NULL);


	//----------------------- Shared memory init --------------------

	//We'll name our shared memory segment "1234".
    key = 1234;

    //Create the segment.
    if ((shmid = shmget(key, sizeof(int), IPC_CREAT | 0666)) < 0) 
    	error_and_die("shmget-front server");

    //Now we attach the segment to our data space.
    if ((shm = shmat(shmid, NULL, 0)) == (int *) -1) 
    	error_and_die("shmat");



    //----------------------- launch data-server --------------------
    wake_dataserver(envp);



    //--------------------------- heartbeat -------------------------
    struct pii args;
    args.shm = shm;
    args.envp = envp;
	pthread_create( &tid_heartbeat, NULL, manage_heartbeat, (void *)(&args) );


	//----------------------- Socket creation -----------------------

	// create socket
	if ((socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
		perror("socket");
		exit(-1);
	}

	local_addr.sin_family = AF_INET;
	local_addr.sin_port = htons(FRONT_PORT);
	local_addr.sin_addr.s_addr = INADDR_ANY;
	
	//make socket immediatly available after it closes
    setsockopt(socket_fd,SOL_SOCKET,(SO_REUSEADDR),(char*)&option,sizeof(option));

	// bind socket
	err = bind(socket_fd, (struct sockaddr*) &local_addr, sizeof(local_addr));
	if(err == -1) {
		perror("bind");
		exit(-1);
	}

	// listen
	err = listen(socket_fd, backlog);
	if(err == -1) {
		perror("listen");
		exit(-1);
	}


	//---------------------------------- operator ----------------------------------
	pthread_create(&tid_operator, NULL, manage_operator, NULL);


	socklen_t client_addr_size = sizeof(client_addr);

	int errsv;

  	while(1){

    	//----------------------- manage client connections ---------------


		new_socket = accept(socket_fd, (struct sockaddr*) &client_addr, &client_addr_size);
		errsv = errno;

        //if signal is received while in accept, it will return -1 and generate the EINTR error
        if(new_socket < 0 && errsv==EINTR) continue;
		if(new_socket == 0) {
			perror("socket accept");
			exit(-1);
		}

		err = pthread_create(&tid, NULL, manage_client, (void *) new_socket);
		if(err!=0) {
			perror("pthread_create");
		}
	}
}
Пример #7
0
int
main(int argc, char* argv[]) {
	enum COPY_STRATEGY strategy = UNKNOWN;
	const char* ignore_pattern = NULL;
	bool verbose_flag = false;


	int result = 0, strategy_set_count = 0;
	while ((result = getopt(argc, argv, "ci:lmv")) != -1) {
		switch (result) {
			case 'c':
				strategy_set_count++;
				strategy = CONTENTS;
				break;

			case 'l':
				strategy_set_count++;
				strategy = LARGEST;
				break;

			case 'm':
				strategy_set_count++;
				strategy = MOST_RECENT;
				break;

			case 'v':
				verbose_flag = true;
				break;

			case 'i':
				ignore_pattern = optarg;
				break;

			case '?':
				error_and_die("getopt() failed");
				break; //never executes

			default:
				error_and_die("Unknown option %c", (char) result);
				break; //never executes
		}
	}

	if (strategy_set_count > 1) {
		error_and_die("can only provide zero or one of options -l, -m, -c");
	}

	if (strategy == UNKNOWN) {
		strategy = MOST_RECENT; //assume -m if none given
	}

	if (argc-optind < 2) {
		error_and_die("Require at least one input and output directory.\n"
			"Usage mergedirs [options] indirectory1 [indirectory2 ....] outdirectory");
	}

	const char* output_dir = argv[argc-1];
	argv[argc-1] = NULL; //analysis_stage expects a NULL sentinel'd array of strings

	char** file_list = analysis_stage((const char**)(argv+optind), ignore_pattern, strategy);

	if (strategy != CONTENTS) { //We don't copy if it's -c
		copy_stage((const char**)file_list, output_dir, verbose_flag);
	}


	//not strictly necessary, but it's nice to have valgrind pat us on the back
	for (int i = 0; file_list[i] != NULL; ++i) {
		free(file_list[i]);
	}
	free(file_list);

	return 0;
}