コード例 #1
0
ファイル: ioctlrw.c プロジェクト: insys-projects/gipcy
int ioctl_shm_open(struct ipc_driver *drv, unsigned long arg)
{
    int error = 0;
    struct ipc_create_t ipc_param;

    if(copy_from_user(&ipc_param, (void *)arg, sizeof(struct ipc_create_t))) {
        err_msg(err_trace, "%s(): Error in copy_from_user()\n", __FUNCTION__);
        error = -EFAULT;
        goto do_exit;
    }

    ipc_param.handle = ipc_shm_open( drv, &ipc_param );
    if(!ipc_param.handle) {
        err_msg(err_trace, "%s(): Error in ipc_shm_open()\n", __FUNCTION__);
        error = -EINVAL;
        goto do_exit;
    }

    if(copy_to_user((void*)arg, (void*)&ipc_param, sizeof(struct ipc_create_t))) {
        err_msg(err_trace, "%s(): Error in copy_to_user()\n", __FUNCTION__);
        error = -EFAULT;
        goto do_exit;
    }

do_exit:
    return error;
}
コード例 #2
0
void main(int argc, char **argv)
{
	int           error;
	ipc_shm       shm;
	void         *mem;
	unsigned int  size;
	
	if (argc > 2)
	{
		printf("Incorrect number of arguments.\n");
	}
	else if (argc == 1)
	{
		error = ipc_shm_open("my_shm", &mem, &size);
		
		if (error)
		{
			printf("Error #%d opening the shared memory area.\n", error);
			
			exit(0);
		}
		
		printf("Read message \"%s\" from shared memory area.\n", (char *)mem);
		
		ipc_shm_close(mem);
	}
	else
	{
		error = ipc_shm_create(&shm, "my_shm", 1024, &mem);
		
		if (error)
		{
			printf("Error #%d creating the shared memory area.\n", error);
			
			exit(0);
		}
		
		printf("Posting message \"%s\" to shared memory area.\n", argv[1]);
		
		strcpy((char *)mem, argv[1]);
		
		printf("Press the return key to end the program.\n");
		
		getchar();
		
		ipc_shm_destroy(&shm);
	}
}