c语言如何获取设备信息,主设备号跟次设备号获取调到

主设备号和次设备号获取调到

在运行程序的时候,主设备号和次设备号获取颠倒,查看文件,但是不知道哪里出错了

运行结果如下面

[mlstly885@localhost IO]$ ./01stat /dev/tty

File name: /dev/tty

File number:major 0,minor 5

[mlstly885@localhost IO]$ ls -l /dev/tty

crw-rw-rw-. 1 root tty 5, 0 1月  24 05:46 /dev/tty

希望大家帮我看下,谢谢

代码如下

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#define ERR_EXIT(m) \

do \

{       \

perror(m); \

exit(EXIT_FAILURE); \

}while(0)

#define MAJOR(a) (int)((unsigned short)a >> 8)

#define MINOR(a) (int)((unsigned short)a & 0xFF)

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

{

if (argc != 2)

{

fprintf(stderr, "Usage %s file\n", argv[0]);

exit(EXIT_FAILURE);

}

struct stat sbuf;

printf("File name: %s\n", argv[1]);

if (stat(argv[1], &sbuf) == -1)

ERR_EXIT("stat error");

printf("File number:major %d,minor %d\n", MAJOR(sbuf.st_dev), MINOR(sbuf.st_dev));

return 0;

}

------解决方案--------------------

应该是没有反,中本身已经包含int major(dev_t dev);int minor(dev_t dev);函数,最好直接这样写:

printf("File number:major %d,minor %d\n", major(sbuf.st_dev), minor(sbuf.st_dev));

------解决方案--------------------

#define MAJOR(a) (int)((unsigned short)a >> 8)

#define MINOR(a) (int)((unsigned short)a & 0xFF)

是不是这里的宏没有考虑大小端?

直接用定义好的函数吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要在STM32F103C8T6上连接EC01G模块,并使用AT指令获取GPS位置信息。下面是一个使用C语言编写的示例代码: ```c #include "stm32f1xx_hal.h" #include <string.h> #include <stdlib.h> #define GPS_BUF_SIZE 256 UART_HandleTypeDef huart1; char gps_buffer[GPS_BUF_SIZE]; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { static int buffer_index = 0; if (huart->Instance == USART1) { gps_buffer[buffer_index] = huart->Instance->DR; buffer_index++; if (buffer_index >= GPS_BUF_SIZE) { buffer_index = 0; } HAL_UART_Receive_IT(&huart1, (uint8_t *)&gps_buffer[buffer_index], 1); } } void parse_gps_data(char *gps_data, float *latitude, float *longitude) { char *comma_position = strchr(gps_data, ','); if (comma_position != NULL) { comma_position = strchr(comma_position + 1, ','); if (comma_position != NULL) { char *latitude_str = comma_position + 1; comma_position = strchr(latitude_str, ','); if (comma_position != NULL) { *comma_position = '\0'; *latitude = atof(latitude_str); char *longitude_str = comma_position + 1; comma_position = strchr(longitude_str, ','); if (comma_position != NULL) { *comma_position = '\0'; *longitude = atof(longitude_str); } } } } } int main(void) { HAL_Init(); SystemClock_Config(); huart1.Instance = USART1; huart1.Init.BaudRate = 9600; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; HAL_UART_Init(&huart1); HAL_UART_Receive_IT(&huart1, (uint8_t *)&gps_buffer[0], 1); float latitude = 0; float longitude = 0; while (1) { char *start_position = strstr(gps_buffer, "$GPGGA"); if (start_position != NULL) { char *end_position = strchr(start_position, '\n'); if (end_position != NULL) { int data_length = end_position - start_position; char gps_data[data_length + 1]; strncpy(gps_data, start_position, data_length); gps_data[data_length] = '\0'; parse_gps_data(gps_data, &latitude, &longitude); //发送数据到阿里云设备 //... } } } } ``` 在代码中,我们使用了HAL库来初始化USART1串口,并通过HAL_UART_Receive_IT启动了接收中断。在接收中断回调函数中,我们将接收到的数据存储到缓冲区中,并再启动接收中断以等待下一批数据。 在主循环中,我们搜索缓冲区中是否包含以"$GPGGA"开头的GPS数据。如果找到了数据,我们解析经度和纬度,并将其发送到阿里云设备。你需要根据你的具体应用程序来实现发送数据到阿里云设备的代码。 注意:由于EC01G模块的AT指令格式可能与上述示例代码不同,因此你需要查阅EC01G模块的AT指令手册,以确保正确发送和接收AT指令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值