2010-06-06 3 views
3

저는 C 프로그래밍을 배우고 있습니다. ls 명령과 비슷하지만 더 적은 options.what를 사용하여 입력 디렉토리/파일 이름을 인수로 취한 다음 dirent 구조체 (디렉토리 인 경우)로 모든 디렉토리 항목을 가져옵니다.리눅스 시스템에 파일의 uid를 인쇄하십시오.

나는 파일의 모든 정보를 취하기 위해 stat()를 사용하지만, write()를 사용하여이 값을 인쇄 할 때 내 문제가된다. printf()를 사용하여 인쇄하려면 warninng를 사용한다. 형식 '% ld'은 (는) 'long int'유형을 필요로하지만 인수 2는 '__uid_t'유형을가집니다. 나는 % ld 대신에 무엇을 사용해야하는지, 그리고 다른 특별한 데이터 유형들에 대해서도 사용해야하는지 모른다.

답변

7

__uid_t의 형식 지정자는 시스템에 고유하며 C 표준의 일부가 아니기 때문에 printf은 인식하지 못합니다.

printf("%lu\n", (unsigned long int)uid); /* some systems support 32-bit UIDs */ 
1

당신은 긴 INT로 캐스팅 수 :

일반적인 해결 방법은 모든 시스템이 목표로에 UID 값의 전체 범위에 딱 맞는 형태로 추진하는 것입니다

printf("foobar: %ld\n", (long int)your_uid_t_variable); 
관련 문제