C 로 유닉스의 cat 커맨드 구현, 막혔습니다 ....

Sailor_moon의 이미지

안녕하세요 , 부끄럽게도 학교 과제 입니다만, 너무 오랫동안 진척이 없어 질문 올려봅니다.
optarg에서 읽어오는 걸로 -n 등이나 다른 옵션을 주는 것은 스위치로 해결을 보려하는데 ,
두가지가 걸립니다.

하나는 리디렉션 입니다. 위에 소스에는 적어두었지만 , 제대로 동작 하질 않습니다.
지금 기본으로 프린트f를 통한 스탠다드아웃으로 출력을 하게 되어있습니다만 ,
만약에 리디렉션 커맨드가 들어왔다면 , 해당되는 파일로 출력을 바꾸어야 하는데 , 이걸 어떻게 감지해내고 구현해낼 수 있을까요 ?

두번째는
매핑 옵션입니다.
-m 키를 주면 mapfile 에서 정보를 불러옵니다. mapfile은 알파벳 26개의 라인을 뒤죽배치하는 암호같은 겁니다.
a e
b z
c q
....
이런 정보들이 담겨있고 ,
만약에 제 파일을 실행해서 -m 옵션을 준다면 해당 알파벳을 모두 저런식으로 암호화 해야하는 것인데 ... 모든 a ->e 로 바꾸고 , 모든 b ->z 로 바꾸고 ..이런식입니다.
-M 옵션이라면 반대로구요 , 모든 e를 a로 바꾸고 , 모든 z 를 b로 바꾸고 ...

파일을 라인 바이 라인으로 읽는데 , 어떻게 해야 문자 하나하나를 검사해 가며 바꿀 수 있을지요 ...

planetarium의 이미지

1.
redirection은 보통 shell에서 처리해주는게 맞습니다만, 굳이 (과제니까) cat 안에서 구현하려면
일단 stdout도 "미리 열려있는 하나의 파일" 에 불과하단걸 생각해보시고
printf() 대신 fprintf() 라는게 있습니다.
둘을 잘 조합하면 매 라인마다 조건 검사를 하지 않아도 리다이렉션을 구현할 수 있습니다.

2.
문자열은 문자의 배열이죠. 배열의 요소들이라는 개념으로 접근해보세요.

간단하게 적었지만 이정도 힌트면 만족하시리라 믿습니다...

익명 사용자의 이미지

잘 이해가 안가는게, 과제는 수업시간에 배운 걸로 수행할 수 있는 걸 내주지 않나요?

이 정도 과제는 하다못해 교재에서 그 시간에 진도 나간 부분만 읽어보면 답이 주루룩 나와있을 것 같은데 말입니다.

planetarium의 이미지

수업때 배웠던 내용을 기반으로 깔고 좀더 생각해봐야 하거나, 좀더 스스로 알아봐야 하는 내용들이 보통 나오죠.
생각해보면 이런게 학교와 학원의 차이인지도 모르겠네요... 요새 그런 포스트가 자주 눈에 띄길래 한줄 더 적었습니다.

익명 사용자의 이미지

저도 정말 좋았을텐데요 ... 학원은 그런 식의 숙제를 내주지만 , 학교는 많은걸 찾아보고 생각해보게 합니다.

익명 사용자의 이미지

방향을 잘못 잡고 계신것 같아서 적어 봅니다.

dup()에 대해서 공부해 보세요 ^^ 그럼 이만 ^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.