int main (int argc, char *argv[])  {




  DIR *dirp;
  struct dirent *dp;
  dirp=malloc(sizeof(DIR));
  if(dirp==NULL) {
    exit_on_error("malloc");
  }
  dp=malloc(sizeof(struct dirent));
  if(dp==NULL) {
    exit_on_error("malloc");
  }
  char name[]=".";
  dirp = opendir(name);
  if(dirp==NULL) {
    exit_on_error("opendir");
  }
  int count=0;
  while ((dp = readdir(dirp)) != NULL) {
    if (dp->d_type==DT_REG) {
      count++;
    }
  }
  printf ("%d fichiers
  int err = closedir(dirp);
  if(err<0) {
    exit_on_error("closedir");
  }


}
Exemple #2
0
void validar_num() {
    sem_id = semget(7345, 1, 0);
    exit_on_error(sem_id, "Ligação");
    int encontrou=0;
    printf("Número do aluno:\n");
    fgets(numero, 50, stdin);
    numero[strlen(numero)-1]='\0';

    status_s = semop(sem_id, &DOWN, 1);
    exit_on_error(status_s, "DOWN");

    for (i=0; i<500; i++) {
        if (p[i].num_aluno == atoi(numero)) {
            printf("O nome do aluno é %s\n", p[i].nome);
            encontrou=1;
            break;
        }
    }

    status_s=semop(sem_id, &UP, 1);
    exit_on_error(status_s, "UP");

    if (encontrou==0) {
        printf("Esse número não existe na memória.\n");
        validar_num();
    }
}
Exemple #3
0
static void init(scicos_block *block)
{
  FILE * fp;
  double * pData;
  char filename[30];
  int i;
  int npts=block->ipar[0];

  if(npts==0) {
    fprintf(stderr, "Error - Data length is 0!\n");
    exit_on_error();
  }

  pData=(double *) calloc(npts,sizeof(double));

  par_getstr(filename,block->ipar,3,block->ipar[2]);
  fp=fopen(filename,"r");
  if(fp!=NULL){
    block->ipar[1]=0;
    for(i=0;i<npts;i++) {
      if(feof(fp)) break;
      fscanf(fp,"%lf",&(pData[i]));
    }
    fclose(fp);
  }
  else{
    fprintf(stderr, "File %s not found!\n",filename);
    exit_on_error();
  }
  *block->work=(void *) pData;
}
Exemple #4
0
/* main() */
int main(int argc, char *argv[])
{
    DBusConnection *conn = NULL;
    DBusMessage *msg_query = NULL;
    DBusMessage *msg_reply = NULL;
    DBusError error;

    const char *xml_data = NULL;
    int return_code;

    /* Initialize the error state. */
    dbus_error_init(&error);

    /* Connect to user-session D-Bus */
    fprintf(stdout, "Connecting to Session D-Bus\n");
    conn = dbus_bus_get(DBUS_BUS_SESSION, &error);
    exit_on_error("Failed to open user-session bus.\n", &error);

    /* Print unique name */
    fprintf(stdout, "D-Bus unique name: %s\n", \
                    dbus_bus_get_unique_name(conn));

    /* Request well-know name on the session bus */
    return_code = dbus_bus_request_name(conn, DBUS_CLIENT_NAME, \
                                        DBUS_NAME_FLAG_REPLACE_EXISTING, \
                                        &error);
    exit_on_error("Failed to get well-known name.", &error);
    if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != return_code)
        exit(EXIT_FAILURE);

    /* Send "Introspect" message */
    msg_query = dbus_message_new_method_call(DBUS_SERVER_NAME,  /* Target */
                                             DBUS_OBJECT_PATH,  /* Object */
                                             DBUS_IFACE_INTRO,  /* Interface */
                                             "Introspect");     /* Method name */
 
    msg_reply = dbus_connection_send_with_reply_and_block(conn, msg_query, 1000, &error);
    exit_on_error("Failed to send Introspect message.", &error);

    /* Get the string argument from Introspect call */
    dbus_message_get_args(msg_reply, &error, DBUS_TYPE_STRING, \
                          &xml_data, DBUS_TYPE_INVALID);

    /* Print message information */
    fprintf(stdout, "Object Path \t= %s\n", dbus_message_get_path(msg_query));
    fprintf(stdout, "Interface \t= %s\n", dbus_message_get_interface(msg_query));
    fprintf(stdout, "Message \t= %s\n", dbus_message_get_member(msg_query));
    fprintf(stdout, "Introspect xml_data:\n%s\n", xml_data);

    /* Free messages */
    dbus_message_unref(msg_query);
    dbus_message_unref(msg_reply);
    
    /* Free the connection. */
    dbus_connection_unref(conn);

return EXIT_SUCCESS;
}
Exemple #5
0
void recebe_msg() {
    msg_id=msgget(96975, 0);
    exit_on_error(msg_id, "Ligação");

    printf("À espera de uma mensagem...\n");
    status = msgrcv(msg_id, &receber_msg, sizeof(receber_msg.dados), enviar_msg.dados.pid_passageiro, 0);
    exit_on_error (status, "Recepção");

    printf("O pid do condutor é %d\n", receber_msg.dados.pid_condutor);
}
Exemple #6
0
int rtRegisterScope(const char *name, int n, int ID )
{
	int i;
	int nscope;


	rt_sched_lock();
	nscope = NSCOPE++;
	rt_sched_unlock();

	if( nscope>= MAX_SCOPES ){
		fprintf(stderr,"Error: Scopes exceed %d \n",MAX_SCOPES);
		return -1;
	}
	if ( ID <= 0  )
		fprintf(stderr,"Warning: scopes ID must be positive\n");

	for (i = 0; i < MAX_SCOPES; i++) {
		if (rtaiScope[i].ID == ID)
			fprintf(stderr,"Warning: two or more scopes have the same ID(%d)\n",ID);
	}

	sprintf(rtaiScope[nscope].MBXname, "%s%d", TargetMbxID, nscope);
	rtaiScope[nscope].ntraces = n;
	rtaiScope[nscope].ID = ID;
	rtaiScope[nscope].mbx=  (MBX *) RT_typed_named_mbx_init(0,0,rtaiScope[nscope].MBXname,(MBX_RTAI_SCOPE_SIZE/((n+1)*sizeof(float)))*((n+1)*sizeof(float)),FIFO_Q);
	if(rtaiScope[nscope].mbx == NULL) {
		fprintf(stderr, "Cannot init mailbox\n");
		exit_on_error();
	}
	strncpyz(rtaiScope[nscope].name, name, MAX_NAME_SIZE);

	return 0;
}
Exemple #7
0
int rtRegisterMeter(const char *name, int n, int ID )
{
	int i;
	int nmeter;


	rt_sched_lock();
	nmeter = NMETERS++;
	rt_sched_unlock();

	if( nmeter >= MAX_METERS ){
		fprintf(stderr,"Error: Meters exceed %d \n",MAX_METERS);
		return -1;
	}

	if ( ID <= 0  )
		fprintf(stderr,"Warning: meters ID must be positive\n");

	for (i = 0; i < MAX_METERS; i++) {
		if (rtaiMeter[i].ID == ID)
			fprintf(stderr,"Warning: two or more meters have the same ID(%d)\n",ID);
	}

	sprintf(rtaiMeter[nmeter].MBXname, "%s%d", TargetMeterMbxID, nmeter);
	rtaiMeter[nmeter].ntraces = n;
	rtaiMeter[nmeter].ID = ID;
	rtaiMeter[nmeter].mbx=  (MBX *) RT_typed_named_mbx_init(0,0,rtaiMeter[nmeter].MBXname,(MBX_RTAI_METER_SIZE/((n+1)*sizeof(float)))*((n+1)*sizeof(float)),FIFO_Q);
	if(rtaiMeter[nmeter].mbx == NULL) {
		fprintf(stderr, "Cannot init mailbox\n");
		exit_on_error();
	}
	strncpyz(rtaiMeter[nmeter].name, name, MAX_NAME_SIZE);

	return 0;
}
Exemple #8
0
static void init(scicos_block *block)
{
  char str[20];
  struct MbxSif * mbx = (struct MbxSif *) malloc(sizeof(struct MbxSif));
  int nch=block->nin;
  par_getstr(str,block->ipar,2,block->ipar[0]);
  strcpy(mbx->mbxName,str);
  par_getstr(str,block->ipar,2+block->ipar[0],block->ipar[1]);

  struct sockaddr_in addr;

  if(!strcmp(str,"0")) {
    mbx->tNode = 0;
    mbx->tPort = 0;
  }
  else {
    inet_aton(str, &addr.sin_addr);
    mbx->tNode = addr.sin_addr.s_addr;
    while ((mbx->tPort = rt_request_port(mbx->tNode)) <= 0
           && mbx->tPort != -EINVAL);
  }

  mbx->mbx = (MBX *) RT_typed_named_mbx_init(mbx->tNode,mbx->tPort,mbx->mbxName,nch*sizeof(double),FIFO_Q);

  if(mbx->mbx == NULL) {
    fprintf(stderr, "Error in getting %s mailbox address\n", mbx->mbxName);
    exit_on_error();
  }

  *block->work=(void *) mbx;
}
Exemple #9
0
int rtRegisterLed(const char *name, int n, int ID )
{
	int i;
	int nled;


	rt_sched_lock();
	nled = NLEDS++;
	rt_sched_unlock();

	if( nled >= MAX_LEDS ){
		fprintf(stderr,"Error: Leds exceed %d \n",MAX_LEDS);
		return -1;
	}

	if ( ID <= 0  )
		fprintf(stderr,"Warning: leds ID must be positive\n");

	for (i = 0; i < MAX_LEDS; i++) {
		if (rtaiLed[i].ID == ID)
			fprintf(stderr,"Warning: two or more leds have the same ID(%d)\n",ID);
	}

	sprintf(rtaiLed[nled].MBXname, "%s%d", TargetLedMbxID, nled);
	rtaiLed[nled].nleds= n;
	rtaiLed[nled].ID = ID;
	rtaiLed[nled].mbx=  (MBX *) RT_typed_named_mbx_init(0,0,rtaiLed[nled].MBXname,(MBX_RTAI_LED_SIZE/((n+1)*sizeof(float)))*((n+1)*sizeof(float)),FIFO_Q);
	if(rtaiLed[nled].mbx == NULL) {
		fprintf(stderr, "Cannot init mailbox\n");
		exit_on_error();
	}
	strncpyz(rtaiLed[nled].name, name, MAX_NAME_SIZE);

	return 0;
}
Exemple #10
0
Socket::Socket(sockaddr_in addr,int nonblocking)
{
	this->sockfd=socket(AF_INET,SOCK_STREAM,0);
	if (sockfd<0){
		exit_on_error(errno,"failed to create socket");
	}
	int on=1;
	setsockopt(this->sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
	if(bind(this->sockfd,(struct sockaddr*)&addr,sizeof(addr))!=0){
		exit_on_error(errno,"failed to bind socket");

	}
	if(nonblocking!=BLOCKING){
		setNonBlocking(this->sockfd);
	}

}
Exemple #11
0
int Socket::listen(int backlog)
{
	if(::listen(this->sockfd,backlog)!=0){
		exit_on_error(errno,"failed to listen");
	}
	return this->sockfd;

}
int main (int argc, char *argv[])  {

  DIR *dirp;
  struct dirent *dp;
  char name[]=".";
  dirp = opendir(name);
  if(dirp==NULL) {
    exit_on_error("opendir");
  }
  while ((dp = readdir(dirp)) != NULL) {
    printf("%s\n",dp->d_name);
  }
  int err = closedir(dirp);
  if(err<0) {
    exit_on_error("closedir");
  }


}
Exemple #13
0
uint32_t Socket::getlocalhost(char*ip,size_t size)
{
	struct sockaddr_in laddr;
	socklen_t laddr_len=sizeof(laddr);
	::getsockname(this->sockfd,(struct sockaddr*)&laddr,&laddr_len);
	if (NULL==inet_ntop(AF_INET,&laddr.sin_addr.s_addr,ip,size)){
		exit_on_error(errno,"failed to convert binary ip to string");
	}
	return laddr.sin_addr.s_addr;
}
Exemple #14
0
void envia_msg() {
    char l[100];
    time_t t=time(NULL);

    printf("Indique o local de encontro.\n");
    fgets(l, 100, stdin);
    l[strlen(l)-1] = '\0';

    msg_id = msgget (96975, 0);
    exit_on_error (msg_id, "Criação/Ligação");

    strcpy(enviar_msg.dados.local_encontro, l);
    enviar_msg.tipo = 1;
    enviar_msg.dados.pid_passageiro = getpid();
    enviar_msg.dados.data = t;

    status = msgsnd( msg_id, &enviar_msg, sizeof(enviar_msg.dados), 0);
    exit_on_error (status, "Erro no envio\n");

    printf("Mensagem enviada!\n");
}
Exemple #15
0
int leggitemp()
{
	int fd;
	int end; 
	char temp;	
	uint8_t  buffer[2];
	int16_t  data;
	double   temperature;
	
	
	// Open I2C device
	if ((fd = open(device, O_RDWR)) < 0) exit_on_error ("Can't open I2C device");

	// Set I2C slave address
	if (ioctl(fd, I2C_SLAVE,I2C_ADDR) < 0) exit_on_error ("Can't talk to slave");
	
		// Read from MAX6635 (from Power-up default register)      
		printf("Reading from MAX6635 at address 0x%.2X on %s\n", I2C_ADDR, device);

	while(1)
	{
	
		if (read(fd,buffer,2) != 2) exit_on_error ("Failed to read from the i2c bus");  
		// printf("Data read from Power-up default register: 0x%.2X%.2X\n", buffer[0], buffer[1],buffer[2]);
		
		data =  buffer[0];
		data = data << 8;
		
		data = data | buffer[1];
		data = data >> 3;
		temperature = MAX6635_RES * data;        
		
		printf("Temperatura: %2.1f °C\n", temperature);        	
		// end = scanf ("%c", &temp); 
		// printf("Premuto: ", end);
		sleep(1);
	}                
	close(fd);
	return (0);
}
Exemple #16
0
int main() {
    int id=shmget(7345, 500*sizeof(Tpassageiro), 0);
    exit_on_error(id, "Ligação");
    printf("Ligado a memoria\n", id);
    p = shmat (id, 0, 0 );
    exit_on_null(p, "shmat");

    validar_num();
    envia_msg();
    recebe_msg();

    exit(0);
}
void initialize()
{
    if (signal(SIGCHLD, SIG_IGN) == SIG_ERR)
    {
        exit_on_error("signal(SIGCHLD, SIG_IGN)\n");
    }

    if (!load_mysql_info())
    {
        exit_on_error("failed to load mysql account infomation\n");
    }

    if (false && drop_privileges() == false)
    {
        exit_on_error("failed to set privileges\n");
    }

    if (logger_start() == -1)
    {
        exit_on_error("Can't create a logger process\n");
    }
}
Exemple #18
0
Socket::Socket(int sockfd,int nonblocking)
{
	if (sockfd<0){
		this->sockfd=socket(AF_INET,SOCK_STREAM,0);
		if(this->sockfd<0){
			exit_on_error(errno,"failed to create socket");
		}
		if (nonblocking!=BLOCKING){
			setNonBlocking(this->sockfd);
		}
	}else{
		this->sockfd=sockfd;
	}
}
int main(void)
{
    initialize();
    int server_socket = create_socket(PORT);
    if (server_socket == -1)
    {
        exit_on_error("Can't create a socket\n");
    }

    printf("ready to serve!\n");

    service_forever(server_socket, todolist);

    return 0;
}
Exemple #20
0
Socket Socket::accept(int nonblocking)
{
	struct sockaddr_in addr;
	socklen_t addr_length=sizeof(addr);
	
	int conn_sockfd=::accept(this->sockfd,(struct sockaddr*)&addr,&addr_length);
	if (conn_sockfd<0){
		exit_on_error(errno,"failed to accept connection");
	}

	if(nonblocking!=BLOCKING){
		setNonBlocking(conn_sockfd);
	}
	return Socket(conn_sockfd,nonblocking);
}
Exemple #21
0
void acabou(int sinal) {
        int id_mem = shmget(73452, 500 * sizeof(Tcondutor), 0);
        exit_on_error(id_mem, "shmget");

        Tcondutor *p = shmat(id_mem, 0, 0);
        exit_on_null(p, "shmat");

        int i;
        for(i = 0; i < 500; i++) {
                if(n == p[i].num_aluno) {
                        p[i].activo = 0;
                        printf("Fora de serviço\n");
                        printf("Saiu\n");
                        exit(0);
                }
        }

}
Exemple #22
0
static void init(scicos_block *block)
{
  char name[7];
  int nch = GetNin(block);
  int nt = nch+1;
  MBX *mbx;

  rtRegisterScope(Getint8OparPtrs(block,1), (char**)&block->oparptr[1], nch);
  get_a_name(TargetMbxID,name);

  mbx = (MBX *) RT_typed_named_mbx_init(0,0,name,(MBX_RTAI_SCOPE_SIZE/(nt*sizeof(double)))*(nt*sizeof(double)),FIFO_Q);
  if(mbx == NULL) {
    fprintf(stderr, "Cannot init mailbox\n");
    exit_on_error();
  }

  *(block->work) = mbx;
}
Exemple #23
0
static void init(scicos_block *block)
{
  char ledName[20];
  char name[7];
  int nch  = GetNin(block);
  int * ipar = GetIparPtrs(block);
  MBX *mbx;

  par_getstr(ledName,ipar,1,ipar[0]);
  rtRegisterLed(ledName,nch);
  get_a_name(TargetLedMbxID,name);

  mbx = (MBX *) RT_typed_named_mbx_init(0,0,name,MBX_RTAI_LED_SIZE/sizeof(unsigned int)*sizeof(unsigned int),FIFO_Q);
  if(mbx == NULL) {
    fprintf(stderr, "Cannot init mailbox\n");
    exit_on_error();
  }

  *(block->work) = mbx;

}
Exemple #24
0
int rtRegisterLogData(const char *name, int nrow, int ncol, int ID)
{
	int i;
	int nlogs;


	rt_sched_lock();
	nlogs = NLOGS++;
	rt_sched_unlock();

	if( nlogs >= MAX_LOGS ){
		fprintf(stderr,"Error: Logs exceed %d \n",MAX_LOGS);
		return -1;
	}

	if ( ID <= 0  )
		fprintf(stderr,"Warning: logs ID must be positive\n");

	for (i = 0; i < MAX_LOGS; i++) {
		if (rtaiLogData[i].ID == ID)
			fprintf(stderr,"Warning: two or more logs have the same ID(%d)\n",ID);
	}

	sprintf(rtaiLogData[nlogs].MBXname, "%s%d", TargetLogMbxID, nlogs);
	rtaiLogData[nlogs].nrow = nrow;
	rtaiLogData[nlogs].ncol = ncol;
	rtaiLogData[nlogs].ID = ID;
	rtaiLogData[nlogs].mbx=  (MBX *) RT_typed_named_mbx_init(0,0,rtaiLogData[nlogs].MBXname,(MBX_RTAI_LOG_SIZE/((ncol*nrow)*sizeof(float)))*((ncol*nrow)*sizeof(float)),FIFO_Q);
	if(rtaiLogData[nlogs].mbx == NULL) {
		fprintf(stderr, "Cannot init mailbox\n");
		exit_on_error();
	}
	strncpyz(rtaiLogData[nlogs].name, name, MAX_NAME_SIZE);

	return 0;
}
Exemple #25
0
/* fetch a new db tree on root */
static int fetch_db_tree(DB_NODE **p_root,struct mpd_connection *conn)
{
    if (*p_root)
        return 1;

    /* create root */
    DB_NODE *root = (DB_NODE*)malloc(sizeof(DB_NODE));
    root->type = DB_DIRECTORY;
    /* use calloc for root->uri to ease free_db_tree() */
    root->uri = (char *)calloc(2,sizeof(char));
    strncpy(root->uri,"/",1);
    root->rating = 0;
    root->duration = 0;
    root->p = NULL;
    root->s = NULL;
    root->c = NULL;
    root->num_c = 0;

    /* set top node */
    DB_NODE *top = root;

	if (!mpd_send_list_all_meta(conn,"/")) {
        clear_or_exit_on_error(conn);
        return 1;
    }

    /* add nodes recursively */
    struct mpd_entity *entity;
	while ((entity = mpd_recv_entity(conn))) {

        DB_NODE *node = (DB_NODE*)malloc(sizeof(DB_NODE));

        const char *name = NULL;
        switch (mpd_entity_get_type(entity)) {
            case MPD_ENTITY_TYPE_DIRECTORY:
                node->type = DB_DIRECTORY;

                name = mpd_directory_get_path(mpd_entity_get_directory(entity));
                assert (name && strlen(name));
                node->uri = (char *)calloc(strlen(name)+1,sizeof(char));
                strncpy(node->uri,name,strlen(name));

                node->rating = 0;
                node->duration = 0;
                break;
            case MPD_ENTITY_TYPE_SONG:
                node->type = DB_SONG;

                name = mpd_song_get_uri(mpd_entity_get_song(entity));
                assert (name && strlen(name));
                node->uri = (char *)calloc(strlen(name)+1,sizeof(char));
                strncpy(node->uri,name,strlen(name));

                node->rating = 0;
                node->duration = mpd_song_get_duration(mpd_entity_get_song(entity));
                break;
            case MPD_ENTITY_TYPE_PLAYLIST:
                node->type = DB_PLAYLIST;

                name = mpd_playlist_get_path(mpd_entity_get_playlist(entity));
                assert (name && strlen(name));
                node->uri = (char *)calloc(strlen(name)+1,sizeof(char));
                strncpy(node->uri,name,strlen(name));

                node->rating = 0;
                node->duration = 0;
                break;
            case MPD_ENTITY_TYPE_UNKNOWN:
                break;
        }

        /* backtrace top until it's parent of node */
        while (top != root && !(strstr(node->uri,top->uri) && node->uri[strlen(top->uri)] == '/'))
            top = top->p;

        /* if current top already has chlidren */
        if (top->c) {
            DB_NODE *node2 = top->c;
            /* find the last child */
            while (node2->s)
                node2 = node2->s;
            node2->s = node;
            node->p = node2->p;
            node->p->num_c++;
        } else {
            top->c = node;
            node->p = top;
            node->p->num_c++;
        }
        /* no child, no next sibling */
        node->c = NULL;
        node->s = NULL;
        node->num_c = 0;

        /* update top node */
        if (node->type == DB_DIRECTORY)
            top = node;

		mpd_entity_free(entity);
	}
    if (mpd_connection_get_error(conn) == MPD_ERROR_SUCCESS)
        mpd_response_finish(conn);
    else if (!mpd_connection_clear_error(conn))
        exit_on_error(conn);

    *p_root = root;
    return 0;
}
Exemple #26
0
static void init(scicos_block *block)
{
  struct ADCOMDev * comdev = (struct ADCOMDev *) malloc(sizeof(struct ADCOMDev));
  *block->work = (void *)comdev;

  char devName[15];
  char board[50];
  comedi_krange krange;

  comdev->channel = block->ipar[0];
  comdev->range = block->ipar[1];
  comdev->aref = block->ipar[2];
  comdev->index = block->ipar[3];

  sprintf(devName,"/dev/comedi%d", comdev->index);
  if (!ComediDev[comdev->index]) {
    comdev->dev = comedi_open(devName);
    if (!(comdev->dev)) {
      fprintf(stderr, "COMEDI %s open failed\n", devName);
      exit_on_error();
      return;
    }
    rt_comedi_get_board_name(comdev->dev, board);
    printf("COMEDI %s (%s) opened.\n\n", devName, board);
    ComediDev[comdev->index] = comdev->dev;
  } else
    comdev->dev = ComediDev[comdev->index];

  if ((comdev->subdev = comedi_find_subdevice_by_type(comdev->dev, COMEDI_SUBD_AI, 0)) < 0) {
    fprintf(stderr, "Comedi find_subdevice failed (No analog input)\n");
    comedi_close(comdev->dev);
    exit_on_error();
    return;
  }
  if (!ComediDev_AIInUse[comdev->index] && comedi_lock(comdev->dev, comdev->subdev) < 0) {
    fprintf(stderr, "Comedi lock failed for subdevice %d\n", comdev->subdev);
    comedi_close(comdev->dev);
    exit_on_error();
    return;
  }

  if (comdev->channel >= comedi_get_n_channels(comdev->dev, comdev->subdev)) {
    fprintf(stderr, "Comedi channel not available for subdevice %d\n", comdev->subdev);
    comedi_unlock(comdev->dev, comdev->subdev);
    comedi_close(comdev->dev);
    exit_on_error();
    return;
  }
  if ((comedi_get_krange(comdev->dev, comdev->subdev, comdev->channel, comdev->range, &krange)) < 0) {
    fprintf(stderr, "Comedi get_range failed for subdevice %d\n", comdev->subdev);
    comedi_unlock(comdev->dev, comdev->subdev);
    comedi_close(comdev->dev);
    exit_on_error();
    return;
  }
#ifdef SOFTCALIB
  int flags;
  if ((flags = comedi_get_subdevice_flags(comdev->dev, comdev->subdev)) < 0) {
    fprintf(stderr, "Comedi get_subdevice_flags failed for subdevice %d\n", comdev->subdev);
  } else {
    if (flags & SDF_SOFT_CALIBRATED) {/* board uses software calibration */
      if ((comdev->use_softcal = get_softcal_coef(devName, comdev->subdev,
                comdev->channel, comdev->range, 0, comdev->coefficients)) == 0)
        fprintf(stderr, "No software calibration found for AI Channel %d\n",comdev->channel);
    }
  }
#endif

  ComediDev_InUse[comdev->index]++;
  ComediDev_AIInUse[comdev->index]++;
  comdev->maxdata = comedi_get_maxdata(comdev->dev, comdev->subdev, comdev->channel);
  comdev->range_min = (double)(krange.min)*1.e-6;
  comdev->range_max = (double)(krange.max)*1.e-6;
  printf("AI Channel %d - Range : %1.2f [V] - %1.2f [V]%s\n\n", comdev->channel,
    comdev->range_min, comdev->range_max, (comdev->use_softcal)?" Software calibration used":"");
}
Exemple #27
0
void down(int id) {
        struct sembuf DOWN = {0, -1, 0};
        int semStatus = semop(id, &DOWN, 1);
        exit_on_error(semStatus, "DOWN");
}
Exemple #28
0
void up(int id) {
        struct sembuf UP = {0, 1, 0};
        int semStatus = semop(id, &UP, 1);
        exit_on_error(semStatus, "UP");
}
Exemple #29
0
main() {

        signal(SIGINT,acabou);

        // ligar ao semáforo
        int semid = semget(73452, 1, 0);
        exit_on_error(semid, "semget");

        // ligar à memória partilhada
        int id_mem = shmget(73452, 500 * sizeof(Tcondutor), 0);
        exit_on_error(id_mem, "shmget");
        printf("Ligado à memória\n");

        // Erro do ponteiro
        Tcondutor *p = shmat(id_mem, 0, 0);
        exit_on_null(p, "shmat");

        // input do número do condutor
        char num_aluno[100];
        printf("Número de condutor: ");
        fgets(num_aluno, 100, stdin);
        n = atoi (num_aluno);

        // percorrer a memória partilhada de 500 pos
        // se o número da memória é igual ao inserido
        int i;
        printf("Número inserido: %d\n", n);

        down(semid); // down do semáforo
        for(i = 0; i < 500; i++) {
                if( n == p[i].num_aluno) {
                        p[i].activo = 1; // ativar o condutor
                        printf("Condutor ativo\n");
                        p[i].disponivel_desde = time(NULL); // data atual
                        p[i].PID = getpid(); // o seu PID
  printf("Já és condutor: %s\nA tua matrícula é: %s\n", p[i].nome,p[i].matricula);
                break;
                }
        }
        up(semid); // up do semáforo


        // ligar à fila de mensagens
        int id_msg = msgget(96975, 0);
        exit_on_error(id_msg, "Erro no msgget");
        printf("Ligado à fila\n");

        // ao receber a mensagem 2
        MsgCorrida m;
        while(1) {

                // recebe mensagem 2 do tipo pid
                int status = msgrcv(id_msg, &m, sizeof(m.dados), getpid(), 0);
                exit_on_error(status, "Erro ao receber mensagem 2");
                printf("Mensagem 2 recebida\n");

                // imprimir o pid do passageiro
                printf("O PID do passageiro é: %d\n", m.dados.pid_passageiro);

                // enviar a mensagem 3
                char local[100];
                m.tipo = m.dados.pid_passageiro; // tipo com o PID do passageiro
                m.dados.pid_condutor = getpid(); // PID do condutor com o meu PID
                printf("Meu PID: %d\n", getpid()); // confirmar o meu pid com o Admin e o Passageiro
                printf("Minha localização: ");
                fgets(local, 100, stdin); // minha localização
                local[ strlen(local) - 1 ] = '\0';

                status = msgsnd(id_msg, &m, sizeof(m.dados), 0);
                exit_on_error(status, "Erro ao enviar mensagem 3");
                printf("Mensagem 3 enviada\n");

                // espera de 1-20s
                srand(time(NULL));
                sleep(rand() %20 + 1);

                // pede o valor da corrida
                char val[10];
                printf("Valor da corrida: ");
                fgets(val, 10, stdin);
                val[ strlen(val) - 1 ] = '\0';

                // enviar mensagem 4 com recibo
                m.tipo = 1;
 		m.dados.pid_passageiro = m.dados.pid_passageiro;
                strcpy(m.dados.local_encontro, local);
                m.dados.valor = atof(val);

                status = msgsnd(id_msg, &m, sizeof(m.dados), 0);
                exit_on_error(status, "Erro ao enviar mensagem 4");
                printf("Mensagem 4 enviada\n");
        }

        acabou(SIGINT); // Sinal do Ctrl C
}