Разработка приложений в среде Linux - [208]
>175: job->text = NULL;
>176:
>177: prog = job->progs;
>178: prog->numRedirections = 0;
>179: prog->redirections = NULL;
>180: prog->freeGlob = 0;
>181: prog->isStopped = 0;
>182:
>183: argvAlloced = 5;
>184: prog->argv = malloc(sizeof(*prog->argv) * argvAlloced);
>185: prog->argv[0] = job->cmdBuf;
>186:
>187: buf = command;
>188: src = *commandPtr;
>189: while (*src && !done) {
>190: if (quote == *src) {
>191: quote = '\0';
>192: } else if (quote) {
>193: if (*src ==0 '\\') {
>194: src++;
>195: if (!*src) {
>196: fprintf(stderr,
>197: "после \\ ожидался символ\n");
>198: freeJob(job);
>199: return 1;
>200: }
>201:
>202: /* в оболочке сочетание "\'" должно дать */
>203: if (*src != quote) *buf++ = '\\';
>204: } else if (*src == '*' | | *src == ' ?' | | *src == '[' ||
>205: *src == ']')
>206: *buf++ = '\\';
>207: *buf++ = *src;
>208: } else if (isspace(*src)) {
>209: if (*prog->argv[argc]) {
>210: buf++, argc++;
>211: /* +1 здесь оставляет место для NULL, которое
>212: завершает массив argv */
>213: if ((argc + 1) == argvAlloced) {
>214: argvAlloced += 5;
>215: prog->argv = realloc(prog->argv,
>216: sizeof(*prog->argv) * argvAlloced);
>217: }
>218: prog->argv[argc] = buf;
>219:
>220: globLastArgument(prog, &argc, &argvAlloced);
>221: }
>222: } else switch (*src) {
>223: case '"':
>224: case '\'':
>225: quote = *src;
>226: break;
>227:
>228: case '#': /* комментарий */
>229: done = 1;
>230: break;
>231:
>232: case '>': /* переадресации */
>233: case '<':
>234: i = prog->numRedirections++;
>235: prog->redirections = realloc(prog->redirections,
>236: sizeof(*prog->redirections) * (i+1));
>237:
>238: prog->redirections[i].fd= -1;
>239: if (buf != prog->argv[argc]) {
>240: /* перед этим символом может быть указан номер
>241: переадресовываемого файла */
>242: prog->redirections[i].fd =
>243: strtol(prog->argv[argc], &chptr, 10);
>244:
>245: if (*chptr && *prog->argv[argc]) {
>246: buf++, argc++;
>247: globLastArgument(prog, &argc, &argvAlloced);
>248: }
>249: }
>250:
>251: if (prog->redirections[i].fd == -1) {
>252: if (*src == '>')
>253: prog->redirections[i].fd = 1;
>254: else
>255: prog->redirections[i].fd = 0;
>256: }
>257:
>258: if (*src++ == '>') {
>259: if (*src == '>') {
>260: prog->redirections[i].type = REDIRECT_APPEND;
>261: src++;
>262: } else {
>263: prog->redirections[i].type = REDIRECT_OVERWRIТЕ;
>264: }
>265: } else {
>266: prog->redirections[i].type = REDIRECT_INPUT;
>267: }
>268:
>269: /* Это не соответствует стандарту sh POSIX. Ну и ладно. */
>270: chptr = src;
>271: while (isspace(*chptr)) chptr++;
>272:
>273: if (!*chptr) {
>274: fprintf(stderr, "после %c ожидалось имя файла\n",
>275: *src);
>276: freeJob(job);
>277: return 1;
>278: }
>279:
>280: prog->redirections[i].filename = buf;
>281: while (*chptr && !isspace(*chptr))
>282: *buf++ = *chptr++;
>283:
>284: src = chptr - 1; /* src++ будет сделано позже */
>285: prog->argv[argc] = ++buf;
>286: break;
>287:
>288: case '|': /* канал */
>289: /* завершение этой команды */
>290: if (*prog->argv[argc]) argc++;
>291: if (large) {
>292: fprintf(stderr, "пустая команда в канале\n");
>293: freeJob(job);
>294: return 1;
>295: }
>296: prog->argv[argc] = NULL;
>297:
>298: /* и начало следующей */
>299: job->numProgs++;
>300: job->progs = realloc(job->progs,
>301: sizeof (*job->progs) *
>302: job->numProgs);
>303: prog = job->progs + (job->numProgs - 1);
>304: prog->numRedirections = 0;
>305: prog->redirections = NULL;
>306: prog->freeGlob = 0;
>307: argc = 0;
>308:
>309: argvAlloced = 5;
>310: prog->argv = malloc(sizeof(*prog->argv) *
>311: argvAlloced);
>312: prog->argv[0] = ++buf;
>313:
>314: src++;
>315: while (*src && isspace(*src)) src++;
>316:
>317: if (!*src) {
>318: fprintf(stderr, "пустая команда в канале\n");
>319: return 1;
>320: }
>321: src--; /* инкремент ++ мы сделаем в конце цикла */
>322:
>323: break;
>324:
>325: case '&': /* фон */
>326: *isBg = 1;
>327: case ';': /* разнообразные команды */
>328: done = 1;
>329: returnCommand = *commandPtr + (src - * commandPtr) + 1;
>330: break;
>331:
>332: case '\\':
>333: src++;
>334: if (!*src) {
>335: freeJob(job);
>336: fprintf(stderr, "после \\ ожидался символ\n");
>337: return 1;
>338: }
>339: if (*src == '*' | | *src == '[' || *src == '] '
>340: || *src == '?')
>341: *buf++ = '\\';
>342: /* неудача */
>343: default:
>344: *buf++ = *src;
>345: }
>346:
>347: src++;
>348: }
>349:
>350: if (*prog->argv[argc]) {
>351: argc++;
>352: globLastArgument(prog, &argc, &argvAlloced);
>353: }
>354: if (!argc) {
>355: freeJob(job);
>356: return 0;
>357: }
>358: prog->argv[argc] = NULL;
>359:
>360: if (!returnCommand) {
>361: job->text = malloc(strlen(*commandPtr) + 1);
>362: strcpy(job->text, *commandPtr);
>363: } else {
>364: /*Оставляем любые хвостовые пробелы, хотя и получится это несколько небрежно*/
>365:
>366: count = returnCommand - *commandPtr;
>367: job->text = malloc(count + 1);

Применение виртуальных машин дает различным категориям пользователей — от начинающих до IT-специалистов — множество преимуществ. Это и повышенная безопасность работы, и простота развертывания новых платформ, и снижение стоимости владения. И потому не случайно сегодня виртуальные машины переживают второе рождение.В книге рассмотрены три наиболее популярных на сегодняшний день инструмента, предназначенных для создания виртуальных машин и управления ими: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels.

Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows.

Эта книга поможет вам разобраться в премудростях операционной системы Windows Vista.Информационная насыщенность учебного материала позволяет утверждать, что мультимедийный курс будет интересен и новичкам, и опытным пользователям.

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.

Количество персональных компьютеров в нашей стране растет год от года. Сегодня во многих семьях имеется два или даже три компьютера.Чтобы воспользоваться всеми преимуществами такой ситуации, компьютеры в вашей квартире стоит объединить сетью. Это позволит вам играть по сети в компьютерные игры, совместно использовать дисковое пространство, принтеры, модемы и другие устройства, всю сеть можно соединить с Интернетом. А в офисах сеть между компьютерами просто необходима.Открывающиеся перспективы выглядят очень заманчиво.

Курс лекций, включенных в брошюру, знакомит читателя с популярными свободными программами и системами, полезными при преподавании информатики в средней школе. В обзор вошли основы открытых операционных систем, сведения о пакете «офисных» программ OpenOffice.org, коммуникационном пакете Mozilla, графическом редакторе GIMP, современных графических средах GNOME и KDE и других программах.Для преподавателей информатики и методистов, а также для студентов и аспирантов соответствующих специальностей.© 2002-3, Максим Отставнов.© 2002, Андрей Добровольский (раздел 3.1).Использован текст лекций, публиковавшихся автором в приложении к газете «Первое сентября» «Информатика» (http://inf.1september.ru) в 2002-3 г., материалы брошюры «Прикладные свободные программы в школе» (М.: 2003 г.), а также фрагменты статей, ранее публиковавшихся в журналах «Компьютерра» и «Домашний компьютер».Материалы, представленные в этой книге, также доступны в Интернет на странице www.otstavnov.com/fsft на условиях Свободной лицензии ГНУ на документацию (GNU FDL)