[완료]프로그래밍 질문입니다!

svsummon의 이미지

안녕하세요. 이제 프로그래밍을 배우고 있는 초보 학생입니다..

이번에 학교에서 과제가 나왔는데 모르는 부분이 있어서.. 질문을 하려고 잘하는 친구에게 물어봤더니 여기를 알려주더라구요 'ㅅ'a

게시판을 보니 다들 고수분들 같아서.. 제가 하는 질문이 허접해보이는 =_=;;

그래도 답변 부탁드릴게요 ㅠㅠ

일단 작업환경은 페도라 11버전 vi편집기구요(포럼마을에 vi에 관한게 업어서 그나마 비슷한 C로 왔다는;;)

현재 질문이 과제가 리눅스에서 사용되는 cp명령어를 만들라는 건데요.. 물론 아이노드를 사용하라는건 아니고..

과제에 파일을 복사하는 방법적인 부분은 코드를 짜서 주셨습니다.

제가 하는 부분은 이를 이용해서 콘솔에서 명령어를 칠때 넣어주는 다른 입력 값에 따른 변동사항을 만들라는 것인데요.

문제가 다음과 같습니다

3. 두번째 인자에 파일명이 없이 디렉토리만 입력된다면 파일명은 원본파일명과 동일하다.

ex) TestCopy.out /root/works/test1.txt /root/doc

두번쨰 문제는 인자값을 2개 받아서 처리하라는 건데..

이것은 argv를 이용해서 완료했습니다..

문제는 3번째 인데..

일단 디렉토리와 파일의 구분은 access(argv[1], 06) 이런식으로 하여

만약 2번째로 들어오는 입력값을 06(읽고 쓰기가 되는가?) 로 확인하여 되면 1,

안되면 0의 리턴값을 나오게 하는 access 함수를 이용하였습니다.

만약 두번째 들어오는 입력값이 파일이라면 그대로 argv[1]으로 복사하면 될텐데

제가 문제는 디렉토리일 경우입니다.

일단 chdir 명령어를 통해서 그 폴더로 이동하는 것 까지는 생각을 했는데

첫번째 입력값에서 파일 이름을 뽑아내야 될텐데.. 이걸 하는 방법을 모르겠습니다..

고수님들의 도움 부탁드릴게요 ㅠㅠ

Munsen의 이미지

http://linux.die.net/man/2/stat
디렉토리와 파일의 구분은 stat함수를 이용하면 됩니다.

terzeron의 이미지

일단 Munsen님 방법처럼 stat으로 파일인지 디렉토리인지 알아냈으면
디렉토리의 경우 opendir() ... readdir() ... closedir()을 이용하여
디렉토리에 들어있는 모든 파일에 대해서 iteative하게 파일을 읽어내면 됩니다.

개별 파일에 대한 것은 아시다시피 open() ... read() ... close()로 해결하시면 될 거구요.

tinywolf의 이미지

혹시라도..
"/root/works/test1.txt" 이것에서 "test1.txt" 이것을 분리시키길 원하시는 거라면..
아래와 같이 한번 해보세요.

char* arg1 = "/root/works/test1.txt";
char* filename = strrchr(arg1, '/')+1;
printf(filename);

strrchr은 문자열의 뒤에서 특정문자를 찾아서 그 위치를 반환합니다.
파일이름만 골라낼 수 있을 겁니다.

ㅡ_ㅡ;

unipro의 이미지

*nix의 MSDN인 man을 활용해보세요.
man 3 basename
----
내 블로그: http://unipro.tistory.com

내 블로그: http://unipro.tistory.com

댓글 달기

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