[완료] system()함수로 커맨드라인인수 스트링을 실행시키면 command not found 라고 나옵니다.

pr4nkst3r의 이미지

실행결과가 아래와 같이 명령어를 찾을수 없다고 나옵니다. ps외에 다른 명령어도 명령어를 찾을수없다고 나옵니다. 쉘상태에서 ps와 다른 명령어 모두 제대로 실행됩니다.
아래와 같이 에러가 나는 이유를 자세히 설명해주세요.

실행 : a.out ps -au

실형결과 : Running ps with system
sh:line1:V@ps:command not found
Done
세그멘테이션 오류

-----------------------------------source------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(int argc, char *argv[])
{
char *str;
int i=1;
printf("Running %s with system\n", argv[1]);
/* 명령라인의 인수들을 연결해서 str에 저장 */
while(argc > i) {
strcat(str, argv[i++]);
strcat(str, " ");
}
/* sysstem을 이용해 str에 저장된 명령어 실행 */
system(str);
printf("Done\n");
exit(0);
}

세벌의 이미지

ps 명령의 전체 경로 명을 적으시면 될 거 같은데...

http://sebul.sarang.net/

pr4nkst3r의 이미지

ps명령어의 전체 경로명인 /bin/ps 해도 command not found 라고 나옵니다.

dhunter의 이미지

1) system(argv[1])은 되나요?
2) strcat의 경우 미리 메모리가 할당되어있어야 하는것 같습니다. 또한, str은 초기화가 안 되어있지요.
printf("%s", str); 을 해보세요.
문제를 해결하려면 미리 적절한 공간을 calloc 해주고 해줘야 할것 같네요. 돌아간게 다행인것 같습니다.

...아, 세그폴났네효.

--
from bzImage
It's blue paper

from bzImage
It's blue paper

pr4nkst3r의 이미지

system(argv[1]) 하면 됩니다. 그런데 세그멘테이션 오류가 여전히 뜹니다.

printf("str : %s\n",str); 을 소스에 삽입하면 아래와 같이 출력됩니다.
( a.out ps 를 실행했을경우)

str : V@ps

여기서 V@ 은 무엇을 뜻하는 겁니까? ㅋ

galien의 이미지

쓰레기 값 아닐까요.

str은 그냥 포인터이고 애초에 문자(열)를/을 저장할 공간은 없잖아요...

여기를 읽어보시면

Quote:
strcat()함수는 src문자열을 dest로 복사하며 이때 마지막에 '\0'을 추가시킨다. 문자열을 중첩되지 않으며 dest는 문자열을 저장하기 위한 충분한 공간을 가지고 있어야 한다.

라고 하죠. man을 생활화 하심이...

unipro의 이미지

#include <limits.h>
 
/*... */
 
char str[ARG_MAX] = { '\0', };

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

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

황기천의 이미지

str = (char*)malloc(sizeof(char)*100); <== 포인터에 메모리 할당.

while(argc>1)
{
~~ 생략 ~~

galien 님 말씀대로 메모리 할당해 주시면 해결됩니다.
ps 명령은 path가 걸려있으니 절대경로로 하실필요는 없구요.

댓글 달기

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