Linux C 언어 는 system 명령 을 호출 하고 명령 의 반환 값 을 가 져 옵 니 다.

2611 단어 openwrtlinux
사고: popen 이 열 리 고 명령 이 실 행 된 후에 fp 를 읽 고 output 매개 변수 에 읽 습 니 다.주의: 사이즈 너무 크 지 마 세 요.보통 64, 128 이면 충분 합 니 다.1024 또는 4028 을 사용 하면 단락 오류 가 발생 할 수 있 습 니 다. 스 택 오류 가 발생 할 수 있 습 니 다.popen () 은 셸 명령 을 실행 하고 이 명령 의 반환 값 을 읽 을 수 있 습 니 다.popen () 함 수 는 파 이 프 를 만 들 고 fork () 를 호출 하여 키 프로 세 스 를 만 들 고 셸 을 실행 하여 명령 을 실행 하여 프로 세 스 를 엽 니 다.이 파 이 프 를 통 해 표준 입 출력 작업 을 수행 할 수 있 습 니 다.이 파 이 프 는 fclose () 함수 가 아 닌 pclose () 함수 로 닫 아야 합 니 다.pclose () 함수 가 표준 I/O 흐름 을 닫 고 명령 실행 이 끝 날 때 까지 기다 린 다음 셸 의 종료 상 태 를 되 돌려 줍 니 다.셸 이 실행 되 지 않 으 면 pclose () 가 되 돌아 오 는 종료 상 태 는 셸 이 실행 한 exit 와 같 습 니 다.
static int get_system_output(char *cmd, char *output, int size)
{
    FILE *fp=NULL;  
    fp = popen(cmd, "r");   
    if (fp)
    {       
        if(fgets(output, size, fp) != NULL)
        {       
            if(output[strlen(output)-1] == '
'
) output[strlen(output)-1] = '\0'; } pclose(fp); } return 0; }
    memset( &cmd, 0x00, sizeof(cmd));
    snprintf(cmd, sizeof(cmd), "grep \"%s\" %s | cut -d ' ' -f 1", client_mac, net_arp_file);
    my_printf(LOG_MODE_LEVEL_1, "[##lin##]%s(%d) cmd:%s
"
,__FUNCTION__,__LINE__, cmd); get_system_output(cmd, client_online_tmp, 64); my_printf(LOG_MODE_LEVEL_1, "[##lin##]%s(%d) client_online_tmp:%s
"
,__FUNCTION__,__LINE__, client_online_tmp);

좋은 웹페이지 즐겨찾기