Напишите программу, осуществляющую выдачу информации об элементе каталога. Имя элемента программа получает из командной строки
Напишите программу, осуществляющую выдачу информации об элементе каталога. Имя элемента программа получает из командной строки.
Используемые библиотеки:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
Используемые функции:
int stat( const char *filename, struct stat *buf); - следует по символьным ссылкам
Поле: st_mode /* тип и защита, закодированы в одном поле*/
Используемые макросы:
S_IFMT 0170000 маска для всех битовых полей типа файла
S_IFREG 0100000 обычный файл
S_IFDIR 0040000 каталог
student@loony ~/new $ ls -lF
-rwx------ 3 student student 187 2012-12-23 17:20 1.c*
drwxrwxr-x 2 student student 4096 2012-12-23 16:48 p1/
-rwxrwxr-x 1 student student 8623 2012-12-23 20:29 prog*
lrwxrwxrwx 1 student student 2 2012-12-23 17:22 s1 -> p1/
lrwxrwxrwx 1 student student 3 2012-12-23 17:24 s3 -> 1.c*
student@loony ~/new $ ./prog s1
Тип файла s1: Каталог
student@loony ~/new $ ./prog s3
Тип файла s3: Обычный файл
Ответ:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{struct stat s; stat(argv[1], &s);
int q; static char str[22];
q=s.st_mode & S_IFMT;
switch (q)
{ case S_IFREG: sprintf(str," Обычный файл "); break;
case S_IFDIR: sprintf(str,"Каталог"); break;
default: sprintf(str,"???"); break;}
fprintf(stdout," Тип файла %s: %s\n",argv[1],str);}
Напишите программу, осуществляющую выдачу информации об элементе каталога. Имя элемента программа получает из командной строки.
Используемые библиотеки:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
Используемые функции:
int stat( const char *filename, struct stat *buf); - следует по символьным ссылкам
Поле: st_mode /* тип и защита, закодированы в одном поле*/
Используемые макросы:
S_IFMT 0170000 маска для всех битовых полей типа файла
S_IFDIR 0040000 каталог
student@loony ~/new $ ls -lF
-rwx------ 3 student student 187 2012-12-23 17:20 1.c*
drwxrwxr-x 2 student student 4096 2012-12-23 16:48 p1/
-rwxrwxr-x 1 student student 8623 2012-12-23 20:29 prog*
lrwxrwxrwx 1 student student 2 2012-12-23 17:22 s1 -> p1/
lrwxrwxrwx 1 student student 3 2012-12-23 17:24 s3 -> 1.c*
student@loony ~/new $ ./prog s1
Тип файла s1: Каталог
student@loony ~/new $ ./prog 1.с
Тип файла 1.с: ???
Ответ:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{struct stat s; stat(argv[1], &s);
int q; static char str[22];
q=s.st_mode & S_IFMT;
switch (q)
{case S_IFDIR: sprintf(str,"Каталог"); break;
default: sprintf(str,"???"); break;}
fprintf(stdout," Тип файла %s: %s\n",argv[1],str);}
Напишите программу, осуществляющую выдачу информации об элементе каталога. Имя элемента программа получает из командной строки.
Используемые библиотеки:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
Используемые функции:
int lstat( const char *filename, struct stat *buf); -не следует по символьным ссылкам
Поле: st_mode /* тип и защита, закодированы в одном поле*/
Используемые макросы:
S_IFMT 0170000 маска для всех битовых полей типа файла
S_IFLNK 0120000 символическая ссылка
S_IFREG 0100000 обычный файл
S_IFDIR 0040000 каталог
student@loony ~/new $ ls -lF
-rwx------ 3 student student 187 2012-12-23 17:20 1.c*
drwxrwxr-x 2 student student 4096 2012-12-23 16:48 p1/
-rwxrwxr-x 1 student student 8623 2012-12-23 20:29 prog*
lrwxrwxrwx 1 student student 2 2012-12-23 17:22 s1 -> p1/
lrwxrwxrwx 1 student student 3 2012-12-23 17:24 s3 -> 1.c*
student@loony ~/new $ ./prog s1
Тип файла s1: Cимволическая ссылка
student@loony ~/new $ ./prog p1
Тип файла p1: Каталог
student@loony ~/new $ ./prog 1.c
Тип файла 1.с: Обычный файл
Ответ:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{ struct stat lst; lstat(argv[1], &lst);
int q; static char str[22];
switch (lst.st_mode & S_IFMT)
{case S_IFLNK: sprintf(str,"Cимволическая ссылка"); break;
case S_IFREG: sprintf(str," Обычный файл "); break;
case S_IFDIR: sprintf(str,"Каталог"); break;
default: sprintf(str,"???"); break;}
fprintf(stdout," Тип файла %s: %s\n",argv[1],str);}
Напишите программу, осуществляющую выдачу информации об элементе каталога. Имя элемента программа получает из командной строки.
Используемые библиотеки:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
Используемые функции:
int lstat( const char *filename, struct stat *buf); -не следует по символьным ссылкам
Поле: st_mode /* тип и защита, закодированы в одном поле*/
Используемые макросы:
S_IFMT 0170000 маска для всех битовых полей типа файла
S_IFLNK 0120000 символическая ссылка
student@loony ~/new $ ls -lF
-rwx------ 3 student student 187 2012-12-23 17:20 1.c*
drwxrwxr-x 2 student student 4096 2012-12-23 16:48 p1/
-rwxrwxr-x 1 student student 8623 2012-12-23 20:29 prog*
lrwxrwxrwx 1 student student 2 2012-12-23 17:22 s1 -> p1/
lrwxrwxrwx 1 student student 3 2012-12-23 17:24 s3 -> 1.c*
student@loony ~/new $ ./prog s1
Тип файла s1: Cимволическая ссылка
student@loony ~/new $ ./prog 1.с
Тип файла 1.с: ???
student@loony ~/new $ ./prog p1
Тип файла p1: ???
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv)
{ struct stat lst; lstat(argv[1], &lst);
int q; static char str[22];
switch (lst.st_mode & S_IFMT)
{case S_IFLNK: sprintf(str,"Cимволическая ссылка"); break;
default: sprintf(str,"???"); break;}
fprintf(stdout," Тип файла %s: %s\n",argv[1],str);}