1

Тема: C || Створення файлу, видалення файлу

Чомусь після того, як я ввожу назву файлу, мені її виводить на екран і так безкінечно.

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main()
{
    printf("Enter file name\n");
    char buf[BUFSIZ];
    int n;
    while((n = read(1, buf, BUFSIZ)))
    write(1, buf, n);
    int dell = unlink(buf);
    char c = dell + '0';

    if(dell != 0)
    {
        perror("unlink() error");
    }
    else if(dell >= 0)
    {
        FILE *fp;
        fp = fopen(buf, "w");
    }
    return 0;
}

2

Re: C || Створення файлу, видалення файлу

0. Вирівнюйте код. Ви самі собі псуєте життя (а також і нам).
1. Пишіть завдання, яке має виконувати код. Наприклад, якщо видалити рядок

while((n=read(1,buf,BUFSIZ)))

то згадана вами поведінка припиниться, але я так підозрюю, що вас це чомусь не влаштує.
2. Перший аргумент функцій read та write - дескриптор файлу. Для стандартних дескрипторів є константи STDIN_FILENO та STDOUT_FILENO; числові значення не дуже допомагають. Наприклад, тут ви намагаєтеся читати з потоку STDOUT_FILENO, який не призначений для читання і очікувано повертає помилку, а оскільки код помилки не 0, цикл ніколи не закінчується.

Подякували: QYQYA1

3

Re: C || Створення файлу, видалення файлу

Так, я забрав цей цикл, але код все рівно не робочий, в мене вообще 0 знань С, писав як С++, надоїло, мені постійно меняют мову програмування.

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main()
{
    printf("Enter file name\n");
    char buf[BUFSIZ];
    int n;
    for(int a = 0, a < 0, a++)
    {
        write(1, buf, n);
    }
    int dell = unlink(buf);
    char c = dell + '0';

    if(dell != 0)
    {
        perror("unlink() error");
        FILE *fp;
        fp = fopen(buf, "w");
    }
    else if(dell >= 0)
    {
    }
    return 0;
}

Вийшло щось таке.

Завдання:
Попросити користувача ввести назву файлу, якщо такий файл існує, то вивести повідомлення про це, видалити файл, створити файл <<попередня назва + new>>

4

Re: C || Створення файлу, видалення файлу

QYQYA написав:

писав як С++

Ну якщо ви так на C++ пишете, то зміна мови не становить проблем, все одно нульовий рівень знань.

Ви прочитали, що я написав у пп.0 і 2? Якщо щось не зрозуміли - перепитуйте.

Подякували: QYQYA, leofun012

5

Re: C || Створення файлу, видалення файлу

Програма не дає мені можливості ввести назву файлу, вона зразу виводить помилку, що файлу не існує

write(STDIN_FILENO, buf, n);

6

Re: C || Створення файлу, видалення файлу

А нащо ви намагаєтеся писати в STDIN? Значення слів In та Out знаєте? Один - для read, інший - для write. Не плутайте.

Подякували: QYQYA, leofun012

7

Re: C || Створення файлу, видалення файлу

Написав замість STDIN - STDOUT, нічого не змінилось...

8

Re: C || Створення файлу, видалення файлу

Весь код, будь ласка.

Подякували: QYQYA1

9

Re: C || Створення файлу, видалення файлу

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main()
{
    printf ("Enter file name\n");
    char buf[BUFSIZ];
    int n;

    write(STDOUT_FILENO, buf, n);

    int dell = unlink(buf);
    char c = dell + '0';

    if(dell != 0)
    {
        perror("unlink() error");
        FILE *fp;
        fp = fopen(buf, "w");
    }
    else if(dell >= 0)
    {
    }
    return 0;
}

10

Re: C || Створення файлу, видалення файлу

А тут ви не читаєте назву файлу, відповідно, при спробі видалити вам відповідає, що файлу не існує.

Подякували: QYQYA1

11

Re: C || Створення файлу, видалення файлу

Кінцевий варіант, робочий)
(Правда, не реалізував "передачу" імені видаленого файла новому)

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
unsigned long buf;

int main()
{
printf ("Enter file name\n");
char buf[BUFSIZ];
int n;
write(STDOUT_FILENO,buf,n);
read(STDIN_FILENO,buf,sizeof(unsigned long));
open(buf,O_RDONLY);


int dell = unlink(buf);
char c = dell+'0';

if(dell !=0)
{
perror("unlink() error");
FILE*fp;
fp= fopen(buf,"w");
printf("File created successfully\n");
}
else if(dell>=0)
{
dell = unlink(buf);
printf("File deleted successfully\n");
}

return 0;
}

12

Re: C || Створення файлу, видалення файлу

Просто відкриваєте файл (якщо через <fcntl.h> - то функцією open() з параметром O_CREAT), ну і закриваєте.