指向包含在struct中的struct的指针

时间:2016-01-15 10:36:25

标签: linux pointers struct typedef declaration

我在Linux下使用串口。因为我的接口很少,所以我将两个结构定义为:

typedef struct
{
   int  handle;
   unsigned int port;
   unsigned short baudRate;
   unsigned char parity;
   char  device[128];
} tS_PORT;

typedef struct
{
   unsigned char testSts;
   unsigned char testRet;
   tS_PORT sPort; 
} tR_PORT;

变量R01已声明为tR_PORT R01 = { 5,0 };

如何在tS_PORT上使用指针?

我尝试了以下代码而没有预期的结果。

int test(void)
{
   int ret;
   ret = sOpen(&R01->sPort); // or ? ret = sOpen(R01->&sPort);   
   return 0;
}

static int sOpen(tS_PORT *pPort)
{
   pPort->handle = open(pPort->device, O_RDWR | O_NOCTTY);
   if(pPort->handle < 0)
   {
      perror("open:");
      return (-1);
   }
   return (pPort->handle);
}

... few functions

static int sClose(tS_PORT *pPort)
{
   return (close(pPort->handle));
}

编辑1:

考虑到Kerrek SB的回应后。它有效,但最后一个函数没有返回预期的值。

int test(void)
{
   int ret;
   int closeRet;
   ret = sOpen(&R01.sPort);
   printf("ret = %d\n", ret);  
   closeRet = sClose(&R01.sPort);
   printf("closeRet = %d\n", closeRet);
   printf("handle = %d\n", R01.sPort.handle);
   return 0;
}

static int sOpen(tS_PORT *pPort)
{
   pPort->handle = open(pPort->device, O_RDWR | O_NOCTTY);
   if(pPort->handle < 0)
   {
      perror("open:");
      return (-1);
   }
   return (pPort->handle);
}

... few functions

static int sClose(tS_PORT *pPort)
{
   return (close(pPort->handle));
}

返回:

   ret = 4;  
   closeRet = 0
   handle = 4

为什么句柄不等于0,端口始终打开,不是<?p?

1 个答案:

答案 0 :(得分:2)

你想要&R01.sPort。请注意,R01不是指针。