popen 관련해 궁금한 점이 있습니다.
popen을 이용해 프로그램 상에서 mke2fs를 실행하려고 합니다
FILE *fp;
char buff[256];
fp = popen("mke2fs -F /dev/sda", "r");
if (fp == NULL)
{
perror("erro : ");
exit(0);
}
while(fgets(buff, 256, fp) != NULL)
{
printf("%s", buff);
}
state = pclose(fp);
이렇게 했을경우
mke2fs 1.38 (30-Jun-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
39075840 inodes, 78142806 blocks
3907140 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=79691776
2385 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616
여기까지는 출력이 되는데요..
원하는 카운터 부분은 출력이 안되네요..
Writing inode tables: 17/2385 <== 이부분요//
어떻게 해야 출력이 가능할까요??
그리고 저 카운터를 계속 불러 오려면.. 어떻게 불러와야 하나요??
버퍼 크기가 256 이면...
언뜻 생각한 겁니다 ㅎㅎ
=========================
매일막걸리 한 병 = 상태메롱
한줄에 출력되는
한줄에 출력되는 문제가 255개니까 상관없겠지요.
fgets()로 buf에 255문자씩내로 읽어들이는건데.. 문제는 fgets는 bof문제가 있으니 쓰지 말라는 경고가 나올텐데...(뭐, 무시해도 상관은 없겠지만..). 이왕이면 readline과 같은 함수를 하나 구현해서 사용하시는것이 좋을것 같습니다.
일단, mke2fs.c 내용을 보면, 일반 출력과 다를바가 없어서, pipe로 출력이 흘러 들어올텐데.. 그 부분부터 확인해 보시는것이 어떨까요?
명시적 파이프를 하나 만들고, 그 파이프를 cat으로 출력하는 동시에, mke2fs를 실행해서 명시적 파이프로 출력해 보심이...
이 부분이 mke2fs.c에서 진행사항을 출력하는 부분입니다. 참고하시기 바랍니다.
時日也放聲大哭
時日也放聲大哭
이거 해결방안좀 아시는분 ㅠ_ㅜ
아이구 ㅠ_ㅜ
댓글 달기