Go Back   UNIXおよびLinuxフォーラム > トップフォーラム > プログラミング
Googleのサイト



プログラミング は、 C 、 C + +についての質問の投稿は、 Java 、 SQL 、および他のプログラミング言語です。

Closed Thread
English Japanese Spanish French German Portuguese Italian を搭載 Powered by Google
 
スレッドツール このスレッドを検索 スレッドを評価 表示モード
  #1固定リンク)  
Old 2004年9月12日
登録ユーザー
 

参加日: 2004年9月
場所:下の下
投稿: 11
Question コマンドを分離

おいが

よく私は自分のコードでは小さな問題を抱えている。例えば:

" / binに/睡眠10 &はls - lミラ> xyzを"が入力され、プログラムは別の2つのコマンド1 )の想定は/ bin /睡眠10 & 2 )はls - lミラ> xyzを。これを実現する方法が不明イム。私の現在のプログラムの1つの店舗の両方のコマンド例:上記のように、同じコマンドを入力されている:

コマンドを[ 0 ] :
com_pathname \u003d / binに/睡眠
argc \u003d 5
argv [ 0 ] \u003d / binに/睡眠
argv [ 1 ] \u003d 10
argv [ 2 ] \u003d ls
argv [ 3 ] \u003d-ル
argv [ 4 ] \u003dミラ
#######
redirect_in \u003d NULLの
redirect_out \u003dしかし
com_suffix \u003d

適切なバージョンになるだろう:
コマンドを[ 0 ] :
com_pathname \u003d / binに/睡眠
argc \u003d 2
argv [ 0 ] \u003d / binに/睡眠
argv [ 1 ] \u003d 10
#######
redirect_in \u003d NULLの
redirect_out \u003dしかし
com_suffix \u003d &

コマンド[ 1 ] :
com_pathname \u003d ls
argc \u003d 3
argv [ 0 ] \u003d ls
argv [ 1 ] \u003d-ル
argv [ 2 ] \u003dミラ
#######
redirect_in \u003d NULLの
redirect_out \u003dしかし
com_suffix \u003d

---

コマンドを1つしかない場合、プログラムの格納が正しく入力されています。
もし誰でも、ありがたいです:役立つかもしれないので、ここではコードの


コード:
 
//---------------------------------------------------------------------------------------------------

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

/*function prototypes*/
void student_details();  
void option_exit();
void printComStruct(struct command *com);

//---------------------------------------------------------------------------------------------------

struct command { 
    
	char *com_pathname;		// what is the path name of the command

	int argc;               // the number of arguments to the command
                            // including the command itself

	char *argv[40];			// pointers to strings, each string
                            // is an argument for the command, including
                            // argument "0". The last pointer should
                            // be set to NULL. 

	char *redirect_in;       // if this is not NULL, then the standard input
                            // is redirected to the given file name

    char *redirect_out;      // if this is not NULL, then the standard output
                            // is redirected to the given file name

    char *com_suffix;        // ' ' - no command suffix (last command);
                            // '&' - the command is followed by '&'
                            // ';' - the command is followed by ';';
                            // '|' - the command is followed by '|'.
};

//---------------------------------------------------------------------------------------------------

int main() {

	/*declaration*/
	char *guess = "exit";
	char line[256]; 
	char *break_set = "\n\f\v\\\"~!@#$%^*()_=+'' [] {}:?,";    

    int nCommands = 0;          // number of commands in a command line
	int state = 0;				// if a file has been redirected either way
								// this changes to 1
	int i = 0;
	int c;

	struct command com[10]; // storage for each command

	com->argc = 0;
	
    student_details();  /*present information about the user*/

             /*introduction of what the program is supposed to do*/
   	printf("          Hello and welcome to my program\n");
	printf("\n");
	printf("  This program will repeatedly take one line of input  \n");
	printf("  from the console until the input line is 'exit'. For  \n");
	printf("  each input line, break it down into tokens. The input \n");
	printf("  line should result in a 'dump' of the raw contents of \n");
	printf("  several structures, depending on how many commands \n");
	printf("  were given.\n");
	printf("\n");

	printf(" Mila's Shell> ");
	
	// increment number of commands by 1 because
	// it is start of the program
	nCommands++;
	
	while (gets (line)) {		 

       char *tokp; 
	   char *sp = line; 

       while ((tokp = strtok(sp,break_set)) != NULL) {
		

		   if (strlen(tokp)==1) { /* if the length of the character is 1 */

			  switch (*tokp) { /* switch on the first char */
          

			  case '>': /* output is redirected */
				   
				   state = 1;
				   break;
		
			   case '<': /* output is redirected */

				   state = 2;
				   break;

               case '|': /*  directs the standard output of one Unix command into the 
							 standard input of another Unix command. */
   
				   com[nCommands-1].com_suffix = tokp;
				   break;
		
			   case '&': /* a command shall run in the background */
				   
				   // save in suffix
				   com[nCommands-1].com_suffix = tokp;
				   break;

			   case ';': /* end of command */
				   
				   // save in suffix
				   com[nCommands-1].com_suffix = tokp;
				   break;

			  } // end switch 

		   } // end if 

		   // ---------------------

		     else {

				if (state == 1) {

				    com[nCommands-1].redirect_out = tokp;	
				}

				if (state == 2) {

					com[nCommands-1].redirect_in = tokp;
				}
			
				  else if (state == 0) {

					// save token as argument for command
					// argv = arguments for commands
					// argc = number of arguments to the command;
					com->argc++;
					com->argv[com->argc -1] = tokp;
		
					/* 
					* everytime the program is started the first argument of
					* the input line is stored as the first command
					*/

					if (com->argc == 1) {

						com[0].com_pathname = tokp;
					}

				// -------------------------
			
					com[nCommands-1].redirect_in = NULL;
					com[nCommands-1].redirect_out = NULL;
					com[nCommands-1].com_suffix = NULL;

			 // ---------------------------

					sp = NULL; // continue in this string 
				 } // end else if

			} // end else

       } // end while 

	   /*
		* checks if the input line equals 'exit'. if it does	 
		* the function option_exit is called and the 
		* program terminated. if it does not, another
		* prompt is displayed to allow the user to enter
		* more commands
	   */
	   
	   if(strcmp(line,guess) == 0) {

          option_exit();
       }

       else {

		  com->argv[com->argc] = NULL;

		  // print command structures
		  printf("\n");
		  fprintf(stderr, "*** ICT310 construct dump begin ***\n");

		  for (i = 0; i < nCommands; ++i) {

			fprintf(stderr, " Command[%d]: \n", i); 
			printComStruct(&com[i]);

			for (c = 0; c < com->argc; c++) {

			  com->argv[c] = NULL;
		  }
	  
		  com->argc = 0;
		  nCommands = 0;
		  state = 0;
            
		  }
	
		  fprintf(stderr, "*** ICT310 construct dump end ***\n");

		  for (c = 0; c < com->argc; c++) {

			  com->argv[c] = NULL;
		  }
	  
		  com->argc = 0;
		  nCommands = 0;
		  state = 0;

		  printf("\n");
	      printf("\n Mila's Shell> ");
		  nCommands++;

		  // everytime a user is presented the prompt, increment
		  // the number of comamnds by 1;
       } // end else

	} // end while

	return 0;	

} // end function main()

//---------------------------------------------------------------------------------------------------

void student_details() {  /*function definition*/

	/*student's details*/
	printf("\n");
	printf("\n");
	printf(" Student's Name:	Milos Zdravic\n");
	printf("\n");

} /*end of function*/

//---------------------------------------------------------------------------------------------------

void option_exit() {     /* exit option*/

	printf("\n");
	printf("\n");
	printf("   Thanks for using my program. Wasn't too bad I hope!!!");
   	fflush(stdin);
    printf("\n");
	exit(0);

} /*end of function*/

//---------------------------------------------------------------------------------------------------

void printComStruct(struct command *com) {  /* print function */
 
    int i;
	
	fprintf(stderr,"com_pathname=%s\n", com->com_pathname); 
    fprintf(stderr,"argc=%d\n", com->argc);	
 
	for(i=0; com->argv[i] != NULL; i++) {

       fprintf(stderr,"argv[%d]=%s\n", i, com->argv[i]); 
	}
       
	fprintf(stderr,"#######\n"); 
        
	if (com->redirect_in == NULL)
            fprintf(stderr,"redirect_in=NULL\n"); 
         
	    else
			fprintf(stderr,"redirect_in=%s\n", com->redirect_in);
         
	if (com->redirect_out == NULL)
            fprintf(stderr,"redirect_out=NULL\n"); 
         
	    else
			fprintf(stderr,"redirect_out=%s\n", com->redirect_out); 
         
	fprintf(stderr,"com_suffix=%c\n\n", com->com_suffix); 

} /*end of function*/

//---------------------------------------------------------------------------------------------------

スポンサーリンク
  #2固定リンク)  
Old 2004年9月13日
...@...
 

参加日: 2004年2月
場所: NM
投稿数: 6164
シェルの構文は

コード:
" /bin/sleep 10 && ls -l mila > xyz "

注: & &

また、別のコマンドをすることができます。

それでも問題があなたが、他の問題を抱えていることがあります


コード:
" /bin/sleep 10 && ls -l mila > xyz 2>error.log "

問題の読み取りエラーが記録されます。を削除して'2 > '生産error.log 。
  #3固定リンク)  
Old 2004年9月13日
Perderabo's Avatar
Unixのデーモン
 

参加日: 2001年8月
場所: Ashburn 、バージニア州
投稿数:9150
再:分離コマンド

引用:
もともとmile1982投稿

コード:
 void student_details() {  /*function definition*/

	/*student's details*/
	printf("\n");
	printf("\n");
	printf(" Student's Name:	Milos Zdravic\n");
	printf("\n");

} /*end of function*/

私たちの ルール

( 7 )授業や宿題の問題を投稿しないでください。
スポンサーリンク
Closed Thread

ブックマーク

スレッドツール このスレッドを検索
このスレッドを検索

高度な検索
表示モード このスレッド
このスレッド

投稿ルール
あなた ことができない。 新しいスレッドを投稿
あなた ことができない。 返信の投稿
あなた ことができない。 添付ファイルの投稿
あなた ことができない。 自分の投稿を編集

BBコード なる 〜の上に
スマイリー なる 〜の上に
[イメージ] コードは 〜の上に
HTMLコードは、 オフ
トラックバック なる 〜の上に
ピングバック なる 〜の上に
Refbacks なる オフ


その他のUNIXおよびLinuxフォーラムトピックは参考にすること
スレッド スレッドスターター フォーラム 返信 最後の投稿
catコマンドを使用してエントリを分離 za_7565 シェルプログラミングとスクリプティング 7 2008年1月29日 08:00午前
ファイル名と拡張子を分離 lucaspewkas シェルプログラミングとスクリプティング 2 2007年4月6日 08:07午前
私からは、標準のコマンドを読み取りコード/ pと実行するコマンド Phrozen煙 プログラミング 4 2007年1月22日 02:06午前
とのコマンド/プログラムを分離する; dush_19 プログラミング 2 2006年6月22日 06:34午前
フィールド分離 new2ss シェルプログラミングとスクリプティング 5 2006年2月19日 09:02午後



すべてGMT -4です。現在の時刻は 02:43午前


提供: vBulletin、著作権© 2000 - 2006、Jelsoft企業株式会社。言語翻訳による電源
vBCredits v1.4著作権© 2007 - 2008 、 PixelFXスタジオ
UNIXおよびLinuxのフォーラムコンテンツの著作権© 1993から2010。すべての権利Reserved.Ad管理で RedTyger

コンテンツ関連のURLで vBSEO 3.2.0