(read(cam_fp, g_yuv, width*height*bpp/8) < 0)의미를 알고
글쓴이: aninly / 작성시간: 월, 2005/09/05 - 8:00오후
-
static inline void save_yuv(int width, int height, int bpp, int iter)에서
if (read(cam_fp, g_yuv, width*height*bpp/8) < 0) {
perror("read()");
}
라는 것이 있는데 무슨 의미인지??
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <ctype.h> #include <errno.h> #include <sys/mman.h> #include <sys/time.h> #include <sys/ioctl.h> /* maximum */ #define CAM_WIDTH 720 #define CAM_HEIGHT 240 static int cam_fp = -1; #include "userapp.h" camif_param_t camif_cfg; static unsigned char *g_yuv; #define CODEC_NAME "/dev/misc/codec" void fmalloc(int size) { unsigned int i=0; unsigned int *ptr32; g_yuv = (unsigned char*)malloc(size); if(!g_yuv) { printf("Memory Allcation Failed \n"); exit(1); } ptr32 = (unsigned int *)g_yuv; for (;i<size/4; i++) *ptr32++ = 0xff00ff00; /* Red */ } static inline int cam_init(void) { int dev_fp = -1; dev_fp = open(CODEC_NAME, O_RDWR); if (dev_fp < 0) { perror(CODEC_NAME); printf("Open Failed \n"); return -1; } return dev_fp; } static inline void save_yuv(int width, int height, int bpp, int iter) { FILE *yuv_fp = NULL; char file_name[100]; /* read from device */ if (read(cam_fp, g_yuv, width*height*bpp/8) < 0) { perror("read()"); } if (bpp == 16 ) { sprintf(&file_name[0], "422X%d.yuv", iter); printf("422X%d.yuv", iter); } else { sprintf(&file_name[0], "420X%d.yuv", iter); printf("420X%d.yuv\n", iter); } fflush(stdout); /* file create/open, note to "wb" */ yuv_fp = fopen(&file_name[0], "wb"); if (!yuv_fp) { perror(&file_name[0]); } fwrite(g_yuv, 1, width * height * bpp / 8, yuv_fp); fclose(yuv_fp); }[/]
Forums:
[url]http://man.kldp.org/wiki/FrontPage?
http://man.kldp.org/wiki/FrontPage?action=GetManPage&sec=2&man=read
훗, 못 믿겠나?
[quote="elien"][url]http://man.kldp.org/
제대로 된 답변이네용^^^
못 믿는것이 아니라.
못 믿는것이 아니라. 그 곳에 가 보았지만 전 이해가 잘 안돼더라고요.
제가 C, C++, 구조, 객체지향, 클래스 같은것도 제대로 이해하지 못하는 상태구요.
함수설명만 보고는 잘 이해가 안되더라고요.
절대로 못 믿어서 이러는것이 아닙니다.
Re: 못 믿는것이 아니라.
read는 파일포인터로부터 지정한 바이트만큼 읽어들이는 함수입
니다. read 함수의 리턴값은 읽은 바이트수입니다. 만약 파일의
끝을 만났을때는 0을 리턴합니다.
위의 if 문은 리턴값이 0보다 작을경우 perror(...) 함수를 호출하
라구 되어 있습니다. read 함수가 0보다 작은 경우 값 -1을 리턴
했을 경우는 에러가 발생한것입니다. 그 상황은 제가 정확한 예를
들지는 못하겠네요...
결국 에러가 발생했을경우 perror() 함수를 호출합니다. read()
에서 에러가 발생한 경우 전역변수 errno에 에러번호를 넣구요.
<errno.h 참고> 이 번호에 맞는 에러 메시지를 출력합니다.
xxxxxx: Read() <-- 이런식으로요... 전역변수는 헤더파일에
정의된 것입니다.
전기과이신것 같은데 우선 C 언어 공부를 좀 하셔야겠네요..
열공하세요^ 제친구두 아마 거기인걸로 아는뎅~
[quote="aninly"]못 믿는것이 아니라. 그 곳에 가 보았지만
저것은 글의 내용이 아닌 서명으로, 제 자신에게 하는 말일 뿐
질문자 님에게 어떠한 의도가 있었던 것은 아닙니다. 그로 인해 언짢으셨다면 죄송합니다.
갑작스레 뭔가 프로젝트를 맡게 되신 모양이네요.
현재 신분이 학생이신지 직장인이신지는 모르겠습니다만,
최소한 프로젝트를 소화해낼 수 있는 능력을 만든 다음에 참여하시는 것이 옳을 듯 합니다.
그렇지 않으면 본인에게 지나치게 무리가 될 뿐이며, 일의 진행도 더디거니와, 일로부터 재미;와 실력, 노하우 등을 얻는 것은 거의 불가능 합니다.
의욕은 정말 보기 좋습니다만, 조교 혹은 담당자에게 조금 말미를 요구하시는 것은 어떨까요?
일주일에서 보름 정도 기초를 익히시면 코드를 이해하는 것은 어렵지않을 것도 같습니다만...
주제 넘게 한 말씀 드리고 말았네요.
역시 언짢으셨다면 죄송합니다. T-T
훗, 못 믿겠나?
댓글 달기