[so] Tema1 - Problema mini-shell Windows la citirea / executarea comenzilor simple

ana-maria lepar amylepar at gmail.com
Wed Aug 5 14:04:45 EEST 2009


Salut,

Am incercat sa fac cum mi-ai sugerat .
Am facut un fisier comenzi.txt  care arata asa :
=================================
ipconfig
notepad.exe
help
cls
quit
=================================
Am rulat si am obtinut urmatorul rezultat :

  =================================
C:\Documents and Settings\ana\My Documents\Downloads\codul meu -marti\codul
meu
-marti>mini-shell.exe < comenzi.txt
>
Windows IP Configuration


Ethernet adapter Local Area Connection 3:

        Connection-specific DNS Suffix  . : jinny.ro
        IP Address. . . . . . . . . . . . : 192.168.2.154
        Subnet Mask . . . . . . . . . . . : 255.255.0.0
        Default Gateway . . . . . . . . . : 192.168.0.1

Ethernet adapter Local Area Connection 4:

        Media State . . . . . . . . . . . : Media disconnected

Ethernet adapter Local Area Connection 2:

        Media State . . . . . . . . . . . : Media disconnected


> Assertion failed: false, file parser.y, line 529

This application has requested the Runtime to terminate it in an unusual
way.
Please contact the application's support team for more information.

C:\Documents and Settings\ana\My Documents\Downloads\codul meu -marti\codul
meu
-marti>
=================================


Deci imi ruleaza prima coamnda si pe urma se blocheaza  si imi apare eroarea
de mai sus.  Problema este in for-ul din main, nu la CreateProcess [am rulat
separat ExecuteCommand pentru comenzile de mai sus si merge] , adica aici :

===============
/*! fn int main()
    @brief mainul; este mini-shellul in care se ruleaza comenzile
    @param fara parametri
    @return 0 la succes; -1 la esec
*/
int main(void)
{
    string line;
    command_t* root = NULL;

    for (;;) {
        cout << "> ";
        getline(cin, line);
        if ((line.length() == 0) && !cin.good()) {
            // end of file reached
            cerr << "End of file!" << endl;
            return EXIT_SUCCESS;
        }

        if (parse_line(line.c_str(), &root)) {

            if (root == NULL) {
                cout << "Command is empty!" << endl;
            }
            else {
                // root points to a valid command tree
                // that we can use
                ExecuteCommand(root);

            }
        }
        else {
            // there was an error parsing the command
            cout << "Error parsing!" << endl;
        }

        cout << endl << endl;
        free_parse_memory();
    }
=====================

Sugestii?

Multumesc
Ana
332cc
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20090805/c99e7938/attachment.htm>


More information about the so mailing list