gpt4 book ai didi

c - 想在UBUNTU中通过C++了解无线网络的ESSID

转载 作者:太空狗 更新时间:2023-10-29 17:20:10 27 4
gpt4 key购买 nike

我编写了以下程序来获取我的桌面当前连接到的无线网络的 ESSID,但它给我错误。谁能帮我改正错误?代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
#include <linux/wireless.h>

#define IW_INTERFACE "wlan0"

extern int errno;
struct iwreq wreq;

int main (void)
{
int sockfd;
char * id;

memset(&wreq, 0, sizeof(struct iwreq));
sprintf(wreq.ifr_name, IW_INTERFACE);

if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
fprintf(stderr, "Cannot open socket \n");
fprintf(stderr, "errno = %d \n", errno);
fprintf(stderr, "Error description is : %s\n",strerror(errno));
exit(1);
}
printf("Socket opened successfully \n");


id = new char(IW_ESSID_MAX_SIZE+1);
wreq.u.essid.pointer = id;
if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) {
fprintf(stderr, "Get ESSID ioctl failed \n");
fprintf(stderr, "errno = %d \n", errno);
fprintf(stderr, "Error description : %s\n",strerror(errno));
exit(2);
}
printf("IOCTL Successfull\n");
printf("ESSID is %s\n", wreq.u.essid.pointer);
exit(0);
}

我收到以下错误:

  > 1. Get ESSID ioctl failed 
> 2. errno = 7
> 3. Error description : Argument list too long

最佳答案

在使用werq之前,你应该先设置好长度,检查这个,

int sockfd;
char * id;
id = new char[IW_ESSID_MAX_SIZE+1];

struct iwreq wreq;
memset(&wreq, 0, sizeof(struct iwreq));
wreq.u.essid.length = IW_ESSID_MAX_SIZE+1;

sprintf(wreq.ifr_name, IW_INTERFACE);

if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
fprintf(stderr, "Cannot open socket \n");
fprintf(stderr, "errno = %d \n", errno);
fprintf(stderr, "Error description is : %s\n",strerror(errno));
exit(1);
}
printf("\nSocket opened successfully \n");

wreq.u.essid.pointer = id;
if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) {
fprintf(stderr, "Get ESSID ioctl failed \n");
fprintf(stderr, "errno = %d \n", errno);
fprintf(stderr, "Error description : %s\n",strerror(errno));
exit(2);
}

printf("IOCTL Successfull\n");

printf("ESSID is %s\n", (char *)wreq.u.essid.pointer);

关于c - 想在UBUNTU中通过C++了解无线网络的ESSID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5937757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com