(read(cam_fp, g_yuv, width*height*bpp/8) < 0)의미를 알고

aninly의 이미지
    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);
}
[/]
elien의 이미지

vananamilk의 이미지


제대로 된 답변이네용^^^
aninly의 이미지

못 믿는것이 아니라. 그 곳에 가 보았지만 전 이해가 잘 안돼더라고요.
제가 C, C++, 구조, 객체지향, 클래스 같은것도 제대로 이해하지 못하는 상태구요.
함수설명만 보고는 잘 이해가 안되더라고요.
절대로 못 믿어서 이러는것이 아닙니다.

vananamilk의 이미지

aninly wrote:
못 믿는것이 아니라. 그 곳에 가 보았지만 전 이해가 잘 안돼더라고요.
제가 C, C++, 구조, 객체지향, 클래스 같은것도 제대로 이해하지 못하는 상태구요.
함수설명만 보고는 잘 이해가 안되더라고요.
절대로 못 믿어서 이러는것이 아닙니다.

read는 파일포인터로부터 지정한 바이트만큼 읽어들이는 함수입
니다. read 함수의 리턴값은 읽은 바이트수입니다. 만약 파일의
끝을 만났을때는 0을 리턴합니다.

위의 if 문은 리턴값이 0보다 작을경우 perror(...) 함수를 호출하
라구 되어 있습니다. read 함수가 0보다 작은 경우 값 -1을 리턴
했을 경우는 에러가 발생한것입니다. 그 상황은 제가 정확한 예를
들지는 못하겠네요...
결국 에러가 발생했을경우 perror() 함수를 호출합니다. read()
에서 에러가 발생한 경우 전역변수 errno에 에러번호를 넣구요.
<errno.h 참고> 이 번호에 맞는 에러 메시지를 출력합니다.
xxxxxx: Read() <-- 이런식으로요... 전역변수는 헤더파일에
정의된 것입니다.

전기과이신것 같은데 우선 C 언어 공부를 좀 하셔야겠네요..
열공하세요^ 제친구두 아마 거기인걸로 아는뎅~

elien의 이미지

aninly wrote:
못 믿는것이 아니라. 그 곳에 가 보았지만 전 이해가 잘 안돼더라고요.
제가 C, C++, 구조, 객체지향, 클래스 같은것도 제대로 이해하지 못하는 상태구요.
함수설명만 보고는 잘 이해가 안되더라고요.
절대로 못 믿어서 이러는것이 아닙니다.

저것은 글의 내용이 아닌 서명으로, 제 자신에게 하는 말일 뿐
질문자 님에게 어떠한 의도가 있었던 것은 아닙니다. 그로 인해 언짢으셨다면 죄송합니다.

갑작스레 뭔가 프로젝트를 맡게 되신 모양이네요.
현재 신분이 학생이신지 직장인이신지는 모르겠습니다만,
최소한 프로젝트를 소화해낼 수 있는 능력을 만든 다음에 참여하시는 것이 옳을 듯 합니다.
그렇지 않으면 본인에게 지나치게 무리가 될 뿐이며, 일의 진행도 더디거니와, 일로부터 재미;와 실력, 노하우 등을 얻는 것은 거의 불가능 합니다.
의욕은 정말 보기 좋습니다만, 조교 혹은 담당자에게 조금 말미를 요구하시는 것은 어떨까요?
일주일에서 보름 정도 기초를 익히시면 코드를 이해하는 것은 어렵지않을 것도 같습니다만...

주제 넘게 한 말씀 드리고 말았네요.
역시 언짢으셨다면 죄송합니다. T-T

훗, 못 믿겠나?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.