exec사용법에 대한 질문?

제갈아찌의 이미지

자식프로세스를 생성한다음에 exec를 사용해서 명령어를 실행하려구 하는데요..

인자가 여러개이면 exec를 사용할수 없나요..?

가령
execlp 인경우에
("cat", "cat", "/dev/ttyS0", ">>" ,"/tmp/data", (char *)0)
이렇게 사용하려구 하는데요 아무래도 인자가 하나밖에 실행이 안되는거 같아서요 여러개의 인자를 실행하려면 system을 사용해야 하나요..
답변 부탁드립니다. !!

nthroot의 이미지

당연히 됩니다만...man 페이지를 보시면 다음과 같은 설명이 있습니다.

Quote:

The execle function also specifies the environment of the executed process by following the NULL pointer that terminates the list of arguments in the parameter list or the pointer to the argv array with an additional parameter.

------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.

nthroot의 이미지

중간에 리다이렉션을 쓰셨네요. pipe()를 쓰세요.
리다이렉션은 쉘에서는 인자로 해석 가능할테지만 cat이 받게되면 잘못된 옵션이라고 나올것 같네요.

------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.

제갈아찌의 이미지

근데요.. 리다이렉션은 그럼 사용못하는건가요 .!!
어차피 파이프를 사용한다해도 제가 지금 하려는거에서는 다시 리다이렉션이
필요하게 되는거니까. 다른 방식으로 바꿔야 되는건가요;..

exec를 사용하려면 결국 리다이렉션을 피해서 다른 명령어를 사용해야 하는
건가요? 시스템 쪽에 입문한지 얼마 되지 않아 .. 아직은 어색어색 하네요

혹시 리다이렉션을 사용해서 다른 방법으로 해당 출력 스트림을 저장하는 좋은 팁이 있을까요 ?

답변 정말 감사드립니다. 좋은 하루되세요

kane의 이미지

nthroot님 말씀처럼 리다이렉트(>>)는 쉘에서 지원해주는 것이므로,
프로그램에서는 리다이렉트를 사용하는게 아니라
리다이렉트를 구현해줘야 합니다.

cat의 표준출력을 /tmp/data로 보내고 싶은 것이므로
fork 후, execlp 전에
/tmp/data를 open() 하고,
STDOUT을 close() 하고,
open된 /tmp/data를 STDOUT으로 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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.