[완료]리눅스 간단한 프로그램 질문입니다. ㅠ.ㅠ

obshaha의 이미지

우선.. 짜야하는 프로그램은.. 실행중인 프로세스중에 프로세스 이름을 입력해서
해당 프로세스를 종료하는 프로그램입니다.
제 생각에는... 프로세스 이름이 있는 라인의 처음 pid 부분만 구하면 될것 같은데 이게 어렵네요.. ;;;
프로세스가 몇개 실행되고 있는지도 모르고.. 랜덤인데.. 그리고 실행되는 프로세스 이름도 랜덤이라.. (ex -> gedit, cat 등 이름(길이)이 다르죠..)
lseek으로 위치 변경하기도 참.. 어떻게 해야될지를 모르겠네요.. ;;
아래 코드는 제가 짜보긴 한건데.. ;; 문제가.. 문자열 비교를 어떤식으로 해야되는지
아니면 다른방법으로 어떤식으로 이 문제를 접근해야되는지 참.. 답이 안나오네요.. ㅠ.ㅠ

#include
#include
#include
#include
#include
#include

#define SIZE 1024

main()
{
int nread, filedes;
char buffer[SIZE], buffer2[SIZE];

system("ps > suk4.txt");

if((filedes=open("suk4.txt", O_RDWR)) < 0)
{
printf("fail to call open\n");
exit(1);
}

if((nread=read(filedes, buffer, SIZE)) < 0)
{
printf("fail to call read\n");
exit(1);
}

lseek(filedes, 0, SEEK_END);

printf("현재 실행중인 프로세스 목록을 출력합니다.\n");
printf("%s", buffer);

printf("출력결과를 보고 죽일 프로세스 이름을 입력하세요 : ");
scanf("%s", &buffer2);





close(filedes);
unlink("./suk4.txt");
}

어떻게 buffer2에 받은 문자를 비교해야될지를 도저히 모르겠습니다.
고수분들 도와주세요.. ㅠ.ㅠ

ddoman의 이미지

문자열 비교는 strcmp() 를 사용하시면 됩니다.

조금 주제넘은 참견일수도 있지만,
앞서 올리신 코드나 이 코드에는
항상 올바르게 작동하지 않을 수 있는, 위험한 코드들이 다소 포함되어 있으며,
아직은 리눅스 프로그래밍을 배우는것이 좋은 선택이 아니라는 느낌을 줍니다.

만일 프로그래밍을 지속적으로 공부하실 계획이라면,
대학교 학부 1,2학년 때 흔히 가르치는 자료구조,알고리즘 등을 공부 하신 후에
리눅스나 MS Windows같은 특정 플랫폼에 대항 공부를 시작하세요.

혹, 불가피한 사정으로 어쩔수 없이, 어떻게든 돌아가기만 하는 프로그램을 만들어야 상황이라면,
C언어가 아닌, 쉘스크립트나, 파이썬, 하다못해..자바등을 추천드립니다.

이 프로그램을 정공적인 방법으로 풀려면..

/proc/ 밑의 프로세스 디렉토리들을 훝어서
각 디렉토리 밑의 stat이라는 파일을 읽어들여야합니다.

stat에는 프로세스명과 프로세스 ID을 포함하고 있고

list나, tree등의 자료구조를 만들어서, 해당 /proc 을 통해 얻어낸 프로세스 목록을 저장하고,
사용자로부터 input을 얻었을 때, 해당 문자열과 일치하는 프로세스 정보를 해당 자료구조에서 검색하여
얻어내면 됩니다.

프로세스 이름을 key로 삼은, tree 구조가 가장 적합한 방법일 것입니다.

제가 설명한 부분이 이해하기 힘들다면, 리눅스 프로그래밍 공부보다, 기본적인 자료구조와 알고리즘 공부를 강력하게 추천해드립니다.
그런것 없이, 이런것들 배워봤자 전혀 남는것 없이, 수박 겉햩기식의 지식만 쌓입니다.

obshaha의 이미지

제 문제가 뭔지를 알려주셔 감사드립니다.
이런거 말해주는 사람 사실 별로 없죠.. ^^
글을 읽으면서 공부가 정말 많이 부족했구나 라는 생각이 드네요.
감사드립니다.

kaeri17의 이미지

이런 프로그램이라면 쉘스크립트가 훨씬 좋은 선택인것 같습니다. 실제로 ps를 system으로 실행해서 파일에 저장하여 읽는것은 리눅스 프로그램이라고 말하기 힘들어 보입니다... 윗분 말씀처럼 일단 기초를 확실히 하는 것이 좋을 것 같습니다.

obshaha의 이미지

윗분이 친절히 알려주셨지만...
어쨌든 고맙습니다.
열심히 해야겠네요 ㅎㅎ

댓글 달기

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