Пример #1
0
Файл: lxcfs.c Проект: Blub/lxcfs
static int do_cg_write(const char *path, const char *buf, size_t size, off_t offset,
	     struct fuse_file_info *fi)
{
	int (*cg_write)(const char *path, const char *buf, size_t size, off_t offset,
	     struct fuse_file_info *fi);
	char *error;
	dlerror();    /* Clear any existing error */
	cg_write = (int (*)(const char *, const char *, size_t, off_t, struct fuse_file_info *)) dlsym(dlopen_handle, "cg_write");
	error = dlerror();
	if (error != NULL) {
		fprintf(stderr, "cg_write: %s\n", error);
		return -1;
	}

	return cg_write(path, buf, size, offset, fi);
}
Пример #2
0
static PyObject *
cc_write (PyObject *self, PyObject *args)
{
    CCLibTicker ticker("cc_write");
	int w = 0, l = 0, len = 0, ret = 0;
	int e, flush ;
	char * data ;

	if (!PyArg_ParseTuple(args, "iiis#i", &e, &w, &l, &data, &len, &flush)) {
		return NULL;
	}
	Py_BEGIN_ALLOW_THREADS
	ret = cg_write (e, w, l, data, len, flush) ;
	Py_END_ALLOW_THREADS
	return Py_BuildValue("i", ret);
}
Пример #3
0
int cg_run_nowait(const char *cgroup,
		  int (*fn)(const char *cgroup, void *arg),
		  void *arg)
{
	int pid;

	pid = fork();
	if (pid == 0) {
		char buf[64];

		snprintf(buf, sizeof(buf), "%d", getpid());
		if (cg_write(cgroup, "cgroup.procs", buf))
			exit(EXIT_FAILURE);
		exit(fn(cgroup, arg));
	}

	return pid;
}
Пример #4
0
int cg_run(const char *cgroup,
	   int (*fn)(const char *cgroup, void *arg),
	   void *arg)
{
	int pid, retcode;

	pid = fork();
	if (pid < 0) {
		return pid;
	} else if (pid == 0) {
		char buf[64];

		snprintf(buf, sizeof(buf), "%d", getpid());
		if (cg_write(cgroup, "cgroup.procs", buf))
			exit(EXIT_FAILURE);
		exit(fn(cgroup, arg));
	} else {
		waitpid(pid, &retcode, 0);
		if (WIFEXITED(retcode))
			return WEXITSTATUS(retcode);
		else
			return -1;
	}
}
Пример #5
0
static PyObject *
cc_sendmulti (PyObject *self, PyObject *args)
{
	int hlen = 0, dlen = 0, data_mod = 0, buffer_mod = 0;
	char *hids;
	char *pos;
	char *data ;

	if (!PyArg_ParseTuple(args, "s#s#ii", &hids, &hlen, &data, &dlen, &data_mod, &buffer_mod)) {
		return NULL;
	}

	hlen /= sizeof(int);
	int event = (data_mod == 0)? ITMC_DATA : ITMC_UNRDAT;

	pos = hids;
	Py_BEGIN_ALLOW_THREADS
	for(; hlen>0; hlen--) {
		cg_write(event, *(int *)pos, 0, data, dlen, buffer_mod); 
		pos += sizeof(int);
	}
	Py_END_ALLOW_THREADS
	return Py_BuildValue("i", 0);
}