指向结构中包含的结构的指针

Pointer to a struct included into struct

我正在 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 的回复之后。它有效,但最后一个函数没有 return 预期值。

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));
}

哪个 returns :

   ret = 4;  
   closeRet = 0
   handle = 4

为什么 handle 不等于 0 端口总是打开的,不是吗?

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