Failed to pclose /system/bin/blkid -c /dev/null -s TYPE -s UUID -s LABEL
时间: 2023-09-18 11:08:11 浏览: 81
该错误可能是由于在执行blkid命令时出现了问题。blkid是一个命令行工具,用于查看块设备的文件系统类型和属性。可能的原因包括:
1. blkid命令不存在:请确保已经安装了blkid工具。
2. 权限问题:请确保当前用户有足够的权限来执行blkid命令。
3. 磁盘问题:请检查磁盘是否已经损坏或出现问题。
如果您已经确定blkid命令存在并且有足够的权限,可以尝试使用以下命令来查看文件系统类型和属性:
```
sudo file -s /dev/sdXY
```
其中,/dev/sdXY是您要查看的块设备的路径,例如/dev/sda1。该命令会显示块设备的文件系统类型和属性信息。
相关问题
不使用libudev.h, 请用C语言实现以下命令的功能:udevadm info --query=all --name=/dev/video0
如果你不想使用 `libudev` 库,你可以使用 `popen` 函数来执行命令并获取输出。下面是一个示例程序,使用 C 语言实现获取 `/dev/video0` 设备的详细信息:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BUFFER_SIZE 1024
int main() {
FILE *fp;
char buffer[MAX_BUFFER_SIZE];
const char *command = "udevadm info --query=all --name=/dev/video0";
fp = popen(command, "r");
if (fp == NULL) {
fprintf(stderr, "无法执行命令\n");
return 1;
}
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
printf("%s", buffer);
}
pclose(fp);
return 0;
}
```
这个程序使用 `popen` 函数执行 `udevadm info --query=all --name=/dev/video0` 命令,并逐行读取命令输出的内容,然后打印出来。这样就可以获取到 `/dev/video0` 设备的详细信息。
你可以使用以下命令编译并运行该程序:
```bash
gcc get_device_info.c -o get_device_info
./get_device_info
```
注意,该程序依赖于系统中的 `udevadm` 命令。请确保你的系统中已经安装了 `udev` 工具包,否则程序可能无法正常执行。
char temp[50], voltage[50], offset[50], wr1_linkt[50], wr1_loop[50], wr1_onew[50], wr0_linkt[50], wr0_loop[50], wr0_onew[50], time[50]; char buffer[1024]; int counter = 0; FILE *fp = popen("/usr/bin/sn_core.elf getstat 2>/dev/null","r"); if(fp == NULL){ printf("Failed to run\n"); exit(1); } if(fgets(buffer,sizeof(buffer),fp) == NULL){ printf("Failed to gets!\n"); exit(1); } char *p = strstr(buffer,"mu:"); if(p != NULL){ sscanf(p,"%*[^0123456789]%[^ ]",wr1_loop); printf("mu:%s\n",wr1_loop); }else{ printf("Failed to find mu:\n"); exit(1); } p = strstr(buffer,"dms:"); if(p != NULL){ sscanf(p,"%*[^0123456789]%[^ ]",wr1_onew); printf("dms:%s\n",wr1_onew); }else{ printf("Failed to find dms:\n"); exit(1); } p = strstr(buffer,"crtt:"); if(p != NULL){ sscanf(p,"%*[^0123456789]%[^ ]",wr1_linkt); printf("%c\n",wr1_linkt[0]); }else{ printf("Failed to find crtt:\n"); exit(1); } p = strstr(buffer,"temp:"); if(p != NULL){ sscanf(p,"%*[^0123456789]%[^ ]",temp); printf("%c\n",temp[0]); }else{ printf("Failed to find temp:\n"); exit(1); } p = strstr(buffer,"Time:"); if(p != NULL){ sscanf(p,"%*[^0-9+-]%[^.]",time); printf("%c\n",time[0]); }else{ printf("Failed to find Time:\n"); exit(1); } pclose(fp); return 0; } 运行该代码 打印Failed to find mu:
根据你提供的代码,我分析了一下,Failed to find mu 是因为在 buffer 字符串中没有找到 "mu:" 这个子串。同理,其他的 "dms:", "crtt:", "temp:", "Time:" 也都没有被找到。这可能是因为 sn_core.elf getstat 命令返回的结果与代码中的字符串不匹配导致的。你可以尝试手动运行这个命令并观察其输出,看看是否与代码中的字符串一致。
阅读全文