, 당신은, 새로운 프로세스를 포크, 파이프를 구축 파이프, 간부에 아이의 'STDOUT'
리디렉션 수 하위에 'du'
을 입력하고 상위에서 결과를 읽습니다. 샘플 코드는 다음과 같습니다 :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void) {
int pfd[2], n;
char str[1000];
if (pipe(pfd) < 0) {
printf("Oups, pipe failed. Exiting\n");
exit(-1);
}
n = fork();
if (n < 0) {
printf("Oups, fork failed. Exiting\n");
exit(-2);
} else if (n == 0) {
close(pfd[0]);
dup2(pfd[1], 1);
close(pfd[1]);
execlp("du", "du", "-sh", "/tmp", (char *) 0);
printf("Oups, execlp failed. Exiting\n"); /* This will be read by the parent. */
exit(-1); /* To avoid problem if execlp fails, especially if in a loop. */
} else {
close(pfd[1]);
n = read(pfd[0], str, 1000); /* Should be done in a loop until read return 0, but I am lazy. */
str[n] = '\0';
close(pfd[0]);
wait(&n); /* To avoid the zombie process. */
if (n == 0) {
printf("%s", str);
} else {
printf("Oups, du or execlp failed.\n");
}
}
}
디스크 사용량 (du)과 파일 크기 합계 (stat)는 동일하지 않습니다. 어느 쪽을 원하니? –
stat는 디렉토리의 파일 크기 합계를 반환하지 않습니다. 디렉토리의 stat는 디렉토리 항목 자체가 사용하는 공간의 양을 반환합니다. – derobert