From SergeyFediuk на yandex.ru Sat May 1 21:43:22 2010 From: SergeyFediuk на yandex.ru (=?koi8-r?B?5sXEwMsg88XSx8XK?=) Date: Sat, 01 May 2010 20:43:22 +0400 Subject: [cdev] =?koi8-r?b?1dTJzMnUwSBkZA==?= Message-ID: <283691272732203@web19.yandex.ru> Здраствуйте внес изменения в утилиту, чтобы опции if и of не были жёстко привязаны к конкретной позиции но возникла проблема static void readopt (int argc, char **argv) { int i; char *name; char *val; for (i = optind; i < argc; i++) { name = argv[i]; val = strchr (name, '='); if (val == NULL) { error (0, 0, ("незарегистрированная опция %s"), name); exit (EXIT_FAILURE); } *val++ = '\0'; Проблема вот в этой строчке в name при написании в строчке dd2 if=1 of=2 должно быть в последовательно в первом вхождении ша во втором of при написании printf("s",name); так и отобразиться, а всравнении неверно подскажите как правильно записать эту строку if (name == "if") { input_file = val; input_flags = 1; } else { if (name == "of") { output_file = val; output_flags = 1; } } } } ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: main.c Type: application/octet-stream Size: 1985 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Sat May 1 22:01:34 2010 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sat, 01 May 2010 21:01:34 +0400 Subject: [cdev] =?utf-8?b?0YPRgtC40LvQuNGC0LAgZGQ=?= In-Reply-To: <283691272732203@web19.yandex.ru> References: <283691272732203@web19.yandex.ru> Message-ID: <4BDC5E6E.3060803@komitex.ru> Здравствуйте. Федюк Сергей пишет: > Здраствуйте > внес изменения в утилиту, чтобы опции if и of не были жёстко привязаны к конкретной позиции > но возникла проблема > Проблема вот в этой строчке в name при написании в строчке dd2 if=1 of=2 > должно быть в последовательно в первом вхождении ша > во втором of > при написании printf("s",name); > так и отобразиться, а всравнении неверно > подскажите как правильно записать эту строку > if (name == "if") { > input_file = val; > input_flags = 1; > } else { > if (name == "of") { > output_file = val; > output_flags = 1; > } > } Вам не понятно как Си работает со строками. Вообще говоря такого типа как "строка" в Си нет. Строка в Си это не что иное как последовательно размещённые байты с ASCII-символами (массив из char) завершающийся специальным символом '\0' (его код равен двоичному 0). Так как строка это массив, то можно работать с ней также как с массивом и использовать указатели при работе со строками тоже удобно. Поэтому строки сравниваются как последовательности байтов. Или вы пишете свою функцию или же пользуетесь библиотечными. Т.к. у вас есть стандартная библиотека Си, то на выбор есть минимум две функии это strcmp(3) и strncmp(3). Читайте man-страницу, будут вопросы - пишите. if (strcmp(name, "if") == 0) { input_file = val; input_flags = 1; } У вас сравниваются не строки, а значения указателей т.е. адреса ячеек. -- Г.А. From sitkarev на komitex.ru Sat May 1 22:16:27 2010 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sat, 01 May 2010 21:16:27 +0400 Subject: [cdev] =?utf-8?b?0YPRgtC40LvQuNGC0LAgZGQ=?= In-Reply-To: <283691272732203@web19.yandex.ru> References: <283691272732203@web19.yandex.ru> Message-ID: <4BDC61EB.3080104@komitex.ru> Федюк Сергей пишет: > Здраствуйте > внес изменения в утилиту, чтобы опции if и of не были жёстко привязаны к конкретной позиции > но возникла проблема > Принцип такой. Если у вас есть адрес чего-то т.е. указатель на "что-то", то вы с этим "чем-то" можете делать всё что хотите. Си вам ничего не запрещает. Типы тоже можно преобразовывать и указатели, от void * который может на любой тип ссылаться к любому другому и т.д. На самом деле все указатели, вне зависимости от типа, имеют один и тот же размер - 4 байта на 32-х разрядных машинах и 8 байт на 64-х разрядных, и потому преобразуются друг в дружку без потерь. Адрес ячейки он и в Африке адрес ячейки. Знаете что это последовательность байт, т.е. массив? Вот и ходите по байту вперёд или назад, это как вам угодно. Никаких дополнительных полей или чего-то ещё там нет, в массиве. Все базовые типы отражаются в машинное представление и именно в таком виде они и будут лежать в памяти. -- Г.А. From AlekseiChashihin на yandex.ru Sun May 2 02:33:58 2010 From: AlekseiChashihin на yandex.ru (=?koi8-r?B?/sHdycjJziDhzMXL08XK?=) Date: Sun, 02 May 2010 01:33:58 +0400 Subject: [cdev] df Message-ID: <340201272749638@web44.yandex.ru> Здравствуйте, у нас возникли проблемы при реализации данной утилиты подскажите как можо узнать имя файловой системы какой системный вызов нужно использовать? From AlekseiChashihin на yandex.ru Sun May 2 08:37:55 2010 From: AlekseiChashihin на yandex.ru (=?koi8-r?B?/sHdycjJziDhzMXL08XK?=) Date: Sun, 02 May 2010 07:37:55 +0400 Subject: [cdev] Fwd: df Message-ID: <4471272771476@web128.yandex.ru> Здравствуйте, у нас возникли проблемы при реализации данной утилиты подскажите как можо узнать имя файловой системы какой системный вызов нужно использовать? From sitkarev на komitex.ru Sun May 2 15:30:17 2010 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sun, 02 May 2010 14:30:17 +0400 Subject: [cdev] df In-Reply-To: <340201272749638@web44.yandex.ru> References: <340201272749638@web44.yandex.ru> Message-ID: <4BDD5439.5000902@komitex.ru> Вам будет нужен вызов statvfs(2) и файл /etc/mtab. -- Г.А. Чащихин Алексей пишет: > Здравствуйте, у нас возникли проблемы при реализации данной утилиты > подскажите как можо узнать имя файловой системы > какой системный вызов нужно использовать? > > _______________________________________________ > cdev mailing list > cdev на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev From SergeyFediuk на yandex.ru Mon May 3 12:35:12 2010 From: SergeyFediuk на yandex.ru (=?koi8-r?B?5sXEwMsg88XSx8XK?=) Date: Mon, 03 May 2010 11:35:12 +0400 Subject: [cdev] =?koi8-r?b?1dTJzMnUwSBkZA==?= In-Reply-To: <4BDC61EB.3080104@komitex.ru> References: <283691272732203@web19.yandex.ru> <4BDC61EB.3080104@komitex.ru> Message-ID: <447141272872112@web41.yandex.ru> 01.05.10, 21:16, "Grigoriy A. Sitkarev" : > Вопрос по реализации, сейчас организовано копирование файлов с указанием опции bs самый простой вариант когда количество прочитанных байт равняется заисанным а если они не равны получается нужно считывать n-e кол-во блоков в переменную, пока не будет равняться или не станет больше того кол-ва байтов которые указал пользователь на запись в файл, а потом уже записывать в файл --------------------- Федюк Сергей пишет: > > Здраствуйте > > внес изменения в утилиту, чтобы опции if и of не были жёстко привязаны к конкретной позиции > > но возникла проблема > > > > Принцип такой. Если у вас есть адрес чего-то т.е. указатель на "что-то", > то вы с этим "чем-то" можете делать всё что хотите. Си вам ничего не > запрещает. Типы тоже можно преобразовывать и указатели, от void * > который может на любой тип ссылаться к любому другому и т.д. На самом > деле все указатели, вне зависимости от типа, имеют один и тот же размер > - 4 байта на 32-х разрядных машинах и 8 байт на 64-х разрядных, и потому > преобразуются друг в дружку без потерь. Адрес ячейки он и в Африке адрес > ячейки. > > Знаете что это последовательность байт, т.е. массив? Вот и ходите по > байту вперёд или назад, это как вам угодно. Никаких дополнительных полей > или чего-то ещё там нет, в массиве. Все базовые типы отражаются в > машинное представление и именно в таком виде они и будут лежать в памяти. > > -- > Г.А. > > > _______________________________________________ > cdev mailing list > cdev на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev > > -- Здесь спама нет http://mail.yandex.ru/nospam/sign ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: main.c Type: application/octet-stream Size: 2544 bytes Desc: отсутствует URL: From lenad89 на list.ru Mon May 3 17:02:34 2010 From: lenad89 на list.ru (lenad89) Date: Mon, 03 May 2010 16:02:34 +0400 Subject: [cdev] =?koi8-r?b?1dTJzMnUwSBkZA==?= In-Reply-To: <447141272872112@web41.yandex.ru> References: <283691272732203@web19.yandex.ru> <4BDC61EB.3080104@komitex.ru> <447141272872112@web41.yandex.ru> Message-ID: <1272888154.7950.64.camel@jam-top> > а если они не равны > получается нужно считывать n-e кол-во блоков в переменную, > пока не будет равняться или не станет больше того кол-ва байтов > которые указал пользователь на запись в файл, > а потом уже записывать в файл > > --------------------- а если они не равны: если выходной блок меньше (хотя еще нужно смотреть количество байт, которое вернул read и аргументы conv(см. opengroup)) чем выходной естественно надо заполнять ( считывать n-e кол-во блоков в выходной буфер и учитывать, что в выходном буфере может быть остаток с предыдущего шага). если прочитали меньше читаем еще, если сколько нужно пишем в файл, если больше - пишем в файл обрезанный часть(размером с выходной буфер), а оставшийся часть будет началом следующего выходной буфера если выходной блок больше (хотя еще нужно смотреть количество байт, которое вернул read и аргументы conv(см. opengroup)), то записываем в выходной файл (нужно учитывать, что в выходном буфере может быть еще остаток с предыдущего шага) размер входного блока div размер выходного частей блоков, а остаток в следующий выходной буфер. если выходной блок равен выходному(по размеру), то просто копируем весь(или часть, в зависимости от опций).(можно не копировать, а передать указатель на входной блок). Еще надо бы на cbs обратить внимание :) Если бы спецификации opengroup были бы на русском,то я бы точнее написал, что и как. Так что здесь может быть не все верно, если что поправят. p.s: вместо if () { } else { if() { } } используй if () { } else if() { } 1)зачем fopen, если есть open.(возвращает дескриптор) int in = open(name,O_RDONLY);//открыть только для чтения int out = open(name,O_WRONLY);//открыть только для записи //или другие флаги, смотри man 2 open 2) в условии присваивание, вместо сравнения input_blocksize=output_blocksize 3) Если не удалось открыть, то нужно программу завершать,а не просто писать сообщение. 4) while ((n = read(fileno(in), bufin, input_blocksize)) > 0) { write(fileno(out), bufout, output_blocksize); копировать из bufin в bufout забыл, т.е. записал в out мусор. 5) stat может завершиться ошибкой. 6) а для bs, ibs, obs, cbs аргумент может быть не только числом, так что придется писать свою функцию , которая возвращает размер блока. (-_0) From AlekseiChashihin на yandex.ru Mon May 3 19:02:02 2010 From: AlekseiChashihin на yandex.ru (=?koi8-r?B?/sHdycjJziDhzMXL08XK?=) Date: Mon, 03 May 2010 18:02:02 +0400 Subject: [cdev] df In-Reply-To: <4BDD5439.5000902@komitex.ru> References: <340201272749638@web44.yandex.ru> <4BDD5439.5000902@komitex.ru> Message-ID: <210921272895322@web137.yandex.ru> Здраствуйте, посмотрели функцию statvfs if ((r = statvfs(argv[1], &df2)) == -1) { printf("Error"); } else { printf("свободные блоки = %d\n",df2.f_bavail); printf("свободные I-nodes = %d\n",df2.f_favail); printf("число I-nodes = %d\n",df2.f_files); printf("доступно обычному пользователю байт %d\n",df2.f_frsize * df2.f_bavail); непонятно как используя f_fsid вывести тип файловой системы printf("id файловой системы %d\n",df2.f_fsid); } } когда задаёшь функцию df без параметров то выводится список файловых систем и непонятно как это реализовать 02.05.10, 14:30, "Grigoriy A. Sitkarev" : > Вам будет нужен вызов statvfs(2) и файл /etc/mtab. > > -- > Г.А. > > Чащихин Алексей пишет: > > Здравствуйте, у нас возникли проблемы при реализации данной утилиты > > подскажите как можо узнать имя файловой системы > > какой системный вызов нужно использовать? > > > > _______________________________________________ > > cdev mailing list > > cdev на wiki.syktsu.ru > > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev > > > _______________________________________________ > cdev mailing list > cdev на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev > > -- Здесь спама нет http://mail.yandex.ru/nospam/sign ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: main.c Type: application/octet-stream Size: 1955 bytes Desc: отсутствует URL: From lenad89 на list.ru Mon May 3 19:46:59 2010 From: lenad89 на list.ru (lenad89) Date: Mon, 03 May 2010 18:46:59 +0400 Subject: [cdev] df In-Reply-To: <210921272895322@web137.yandex.ru> References: <340201272749638@web44.yandex.ru> <4BDD5439.5000902@komitex.ru> <210921272895322@web137.yandex.ru> Message-ID: <1272898019.13536.32.camel@jam-top> > непонятно как используя f_fsid вывести тип файловой системы можно не использовать:) а брать его из /etc/mtab, если подойдет. И есть инфа как получить тип фс в man statfs. > когда задаёшь функцию df без параметров то выводится список файловых систем > и непонятно как это реализовать брать инфу о смонтированных ФС из /etc/mtab. Если не указано ни одного пути, то брать все, иначе только выбранные. Можно разобрать файл /etc/mtab и вытащить в массив(или список) структур в которых будет имя устройства(прим. /dev/sdb1), тип(прим. ext4), точка монтирования (прим. /media/disk). можно следить если файл /etc/mtab изменился, то изменять массив. А потом уже брать из него записи, искать записи и т.п. Искать по точкам монтирования - это искать запись, у которой начальная часть совпадает с строкой из поля точка монтирования. пример: 0) /dev/sdb6 /media/disk ext3 1) /dev/sda1 /media/disk-1 ext4 2) /dev/sdc3 /media/disk-2 ext3 поиск /media/disk-1/ddd.log должен вернуть индекс 1 массива. Еще надо смотреть, если на одна фс смонтирована в несколько каталогов, обычно первый встретившийся и если на одну точку смонтировано несколько фс, аналогично. (-_0) From SergeyFediuk на yandex.ru Thu May 6 06:57:26 2010 From: SergeyFediuk на yandex.ru (=?koi8-r?B?5sXEwMsg88XSx8XK?=) Date: Thu, 06 May 2010 05:57:26 +0400 Subject: [cdev] =?koi8-r?b?1dTJzMnUwSBkZA==?= In-Reply-To: <4BDC61EB.3080104@komitex.ru> References: <283691272732203@web19.yandex.ru> <4BDC61EB.3080104@komitex.ru> Message-ID: <73731273111046@web47.yandex.ru> Здравствуйте подскажите пожалуйста во сколько сегодня можно с вами встретиться по поводу утилиты. На данный момент, поправлен вывод времени, выводится не просто кол-во блоков которые при копированиии были прочитаны и записаны, но и указывается сколько блоков было полностью скопировано и записано Реализована возможность задавать размер блока чтения и блока записи в байтах ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: main.c Type: application/octet-stream Size: 5428 bytes Desc: отсутствует URL: From karginrusja на mail.ru Thu May 6 12:07:40 2010 From: karginrusja на mail.ru (Kargin Ruslan) Date: Thu, 06 May 2010 11:07:40 +0400 Subject: [cdev] =?koi8-r?b?1dTJzMnUwSBkZA==?= In-Reply-To: <73731273111046@web47.yandex.ru> References: <283691272732203@web19.yandex.ru> <4BDC61EB.3080104@komitex.ru> <73731273111046@web47.yandex.ru> Message-ID: <1273129660.3734.1.camel@luci> В Чтв, 06/05/2010 в 05:57 +0400, Федюк Сергей пишет: > Здравствуйте подскажите пожалуйста во сколько сегодня можно с вами встретиться по поводу утилиты. > > На данный момент, поправлен вывод времени, выводится не просто кол-во блоков которые при копированиии были прочитаны и записаны, но и указывается сколько блоков было полностью скопировано и записано > Реализована возможность задавать размер блока чтения и блока записи в байтах > _______________________________________________ cdev mailing list cdev на wiki.syktsu.ru http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev Григория не будет в Сыктывкаре вплоть по 7-е число, так что сегодня он с вами встретиться не сможет From sitkarev на komitex.ru Sat May 8 01:22:12 2010 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sat, 08 May 2010 00:22:12 +0400 Subject: [cdev] =?utf-8?b?0YPRgtC40LvQuNGC0LAgZGQ=?= In-Reply-To: <1273129660.3734.1.camel@luci> References: <283691272732203@web19.yandex.ru> <4BDC61EB.3080104@komitex.ru> <73731273111046@web47.yandex.ru> <1273129660.3734.1.camel@luci> Message-ID: <4BE47674.3080805@komitex.ru> Не смотря на то что зачёты получили все, надо доделать ваши утилиты. Надеюсь что большую часть из вас я увижу в студенческой лаборатории в сентябре. -- Г.А. Kargin Ruslan пишет: > В Чтв, 06/05/2010 в 05:57 +0400, Федюк Сергей пишет: >> Здравствуйте подскажите пожалуйста во сколько сегодня можно с вами встретиться по поводу утилиты. >> >> На данный момент, поправлен вывод времени, выводится не просто кол-во блоков которые при копированиии были прочитаны и записаны, но и указывается сколько блоков было полностью скопировано и записано >> Реализована возможность задавать размер блока чтения и блока записи в байтах >> _______________________________________________ cdev mailing list cdev на wiki.syktsu.ru http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev > Григория не будет в Сыктывкаре вплоть по 7-е число, так что сегодня он с > вами встретиться не сможет > From SergeyFediuk на yandex.ru Sat May 8 02:55:05 2010 From: SergeyFediuk на yandex.ru (=?koi8-r?B?5sXEwMsg88XSx8XK?=) Date: Sat, 08 May 2010 01:55:05 +0400 Subject: [cdev] dd Message-ID: <219521273269305@web28.yandex.ru> Григорий Александрович, так вы посмотрели на данный момент конечный вариант программы? Что нужно еще доделать? P.S. Зачет в зачетку вы поставите только когда мы сдадим утилиту полностью? ----------- следущая часть ----------- A non-text attachment was scrubbed... Name: main.c Type: application/octet-stream Size: 5428 bytes Desc: отсутствует URL: From sitkarev на komitex.ru Sat May 8 02:59:32 2010 From: sitkarev на komitex.ru (Grigoriy A. Sitkarev) Date: Sat, 08 May 2010 01:59:32 +0400 Subject: [cdev] dd In-Reply-To: <219521273269305@web28.yandex.ru> References: <219521273269305@web28.yandex.ru> Message-ID: <4BE48D44.6070607@komitex.ru> Оно уже в ведомости стоит. В зачётки - это формальность. Я сообщу когда буду в университете, соберётесь к тому времени кому нужно в зачётку поставить. Я смотрел что у вас там. После праздников напишу замечания, может быть раньше. -- Г.А. Федюк Сергей пишет: > Григорий Александрович, так вы посмотрели на данный момент конечный вариант программы? Что нужно еще доделать? > P.S. Зачет в зачетку вы поставите только когда мы сдадим утилиту полностью? > > > ------------------------------------------------------------------------ > > _______________________________________________ > cdev mailing list > cdev на wiki.syktsu.ru > http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev