ioctl 또는 유사한 C/C++를 사용하여 전송 속도를 설정할 수 있습니다.

ioctl 또는 유사한 C/C++를 사용하여 전송 속도를 설정할 수 있습니다.

현재 IP 링크를 사용하여 can0의 전송 속도를 설정하고 있습니다.

/sbin/ip 링크 설정 can0 up 유형의 비트 전송률은 250000입니다.

C/C++에서 동일한 작업을 수행하는 방법을 알고 싶습니다.

답변1

앞에서 언급했듯이 libnetlink를 사용하여 iproute2 소스 코드를 볼 수 있습니다. 하지만 문서에 따르면libnetlink는 내부용으로, 새 프로그램에서는 libmnl을 사용합니다..

Libmnl의 API는 약간 다르기 때문에 직접 대체하지는 않지만 동일한 방식으로 작동하고 작동합니다. 기본적으로 netlink 메시지를 설정한 다음 중첩된 속성을 추가하기 시작해야 합니다. 메시지가 작성되면 libmnl 소켓 API를 사용하여 netlink로 보내면 완료됩니다.

링크 업/다운을 설정하는 샘플 코드: https://github.com/pevik/libmnl/blob/60e34d339522bbad3142fa1609e4506edd33c969/examples/rtnl/rtnl-link-set.c

전송 속도를 설정하려면 를 설정할 필요가 없습니다 . 대신 ifi_flags장치 이름이 포함된 속성을 추가한 후( can 사용) mnl_attr_put_str중첩된 linkinfo 개체를 추가 해야 합니다 mnl_attr_nest_start. mnl_attr_put_str다음으로, 동일한 기능을 사용하여 캔 비트 타이밍 개체( )도 추가해야 합니다 struct can_bittiming. 바라보다iplink_can.c이 구조에 어떤 데이터를 설정해야 하는지 보여주는 예입니다. mnl_attr_nest_end두 개의 중첩 개체를 호출하여 페이로드 구성을 완료 할 수 있습니다 .

관련 정보