[linux] int main 매개인자로 argv를 받는 이유?

dbsthqkf의 이미지

./text라는 실행파일이 있으면
./text something
을 입력해서 argv를 받아오는데요..
왜 argv를 쉘에서 받죠? 그러니까
scanf라던가 그런 것들이 있는데 왜 굳이 쉘에서 입력받는지 궁금해요

익명 사용자의 이미지

fork(), execl*(), execv*() 류의 함수들을 공부해 보시기 바랍니다. 쉘이던지 일반 프로그램이던지, 프로그램이 다른 프로그램을 실행할 때, 이들 함수를 이용하거든요.

./text something 를 입력하고 엔터 키를 누른 시점에 이르러서야, 쉘이 입력한 문자열을 적절히 해석해서 위 함수들을 호출하게 됩니다. exec류 함수들과 main()의 형태가 어느정도 대칭이 되므로 일단 지금 시점에서는 어느정도 이해된다고 느끼실 수 있을 겁니다.
쉘과 ./text란 프로그램이 인터렉티브하게 상호작용해서 주고 받는 것이 아닙니다.

dbsthqkf의 이미지

그렇다면.......
예를들어 server와 client간의 network 통신하는 프로그램을 구현할 때
ip를 ./server 127:0~~ 이런식으로 argument로 받아오는데
이렇게 argument로 받지않고 scanf로 ip를 받으면 안되나요?

익명 사용자의 이미지

안될거야 없죠. 그런 식으로 동작하는 걸 원하면 그렇게 만들면 됩니다. 프로그램 만드는 사람 마음대로죠.

마잇의 이미지

당연히 됩니다.

다만 그런 방식만을 제공하면 사용자가 쓰기에 불편함이 많습니다. 프로그래밍하기에 적당하지 않은 방식이지요. 실행할 때 마다 사용자의 입력을 필요로 하면 자동화 시킬 수가 없습니다. 실행된 후에야만 사용자의 입력을 받는 프로그램을 자동화 시키기위에 expect라는 프로그램도 있을 정도 입니다.

실제로 실행 중에 동적으로 입력을 받는 프로그램은 거의 드뭅니다. 대부분의 경우 명령행 인자로 넘기거나 표준 입출력을 사용하거나 설정 파일을 불러 오거나 환경 변수를 읽어 동작하는 것이 더 좋은 방식 입니다.

지금 터미널에서 사용하시는 프로그램들 전부 다 옵션이나 파일 이름을 매번 손으로 입력한다고 생각해 보세요.


--
마잇

dbsthqkf의 이미지

설명 감사합니다!
그렇다면 제가 설명을 이해한 바로는

노트북 비밀번호를 설정해놓은 것과 같은 이치인가요?

마잇의 이미지

자동 로그인 설정을 얘기하시는 건가요?


--
마잇

익명 사용자의 이미지

> 왜 굳이 쉘에서 입력받는지 궁금해요

반대지요. 명령 라인에서 입력할 수 있는 것을 왜 굳이 scanf 등으로 프로그램 수행 중에 받으려고 하는지?
명령 라인에서 입력받는 것이 더 편하고 유연하잖아요.
쉘 스크립트만 생각해보더라도 답이 나오지 않나요?
사용자와 계속해서 상호작용해야하는 프로그램이 아닌 이상 명령 라인에서 인자를 받는 것이 여러모로 유리합니다.

댓글 달기

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