From b469bdc170396c01b1404fd6a23be5d069ca4c03 Mon Sep 17 00:00:00 2001 From: Phlake Date: Tue, 2 Aug 2022 18:31:22 +0200 Subject: [PATCH 1/3] initial commit --- .gitignore | 482 ++++++++++++++++++++++++++++++++++++++++++++++----- F1.txt | 1 + fork1.c | 35 ++++ open1.c | 14 ++ open2.c | 21 +++ write-read.c | 11 ++ 6 files changed, 522 insertions(+), 42 deletions(-) create mode 100644 F1.txt create mode 100644 fork1.c create mode 100644 open1.c create mode 100644 open2.c create mode 100644 write-read.c diff --git a/.gitignore b/.gitignore index c6127b3..9aef123 100644 --- a/.gitignore +++ b/.gitignore @@ -1,52 +1,450 @@ -# Prerequisites -*.d +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. -# Object files -*.o -*.ko -*.obj -*.elf +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates +CMakeLists.txt +cmake-build-debug/ -# Linker output -*.ilk -*.map -*.exp +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +[Bb]in/ +[Oo]bj/ +out/ +target/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + + +# Benchmark Results +BenchmarkDotNet.Artifacts/ -# Precompiled Headers -*.gch +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj *.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +# publish/ + +# Publish Web Output +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config + +# Windows Azure Build Output +csx/ +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ -# Libraries +# Others +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Typescript v1 declaration files +typings/ +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +/build +/Build +/deploy +/package +bin/ +obj/ +sql/ +*/obj/debug +**/Debug +#ignore thumbnails created by windows +Thumbs.db +#Ignore files build by Visual Studio +*.obj +*.pdb +*.user +*.aps +*.pch +*.docstates +*.vspscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.dbmdl +*.schemaview +*.tlh +*.cache +*.ilk +*.log +[Bb]in +[Dd]ebug*/ *.lib -*.a -*.la -*.lo +*.sbr +obj/ +[Rr]elease*/ +_ReSharper*/ +[Tt]est[Rr]esult* +*.docstates +*.swp +*.*~ +*.gpState +*.ReSharper* +*.preflight +*.nocommit +#Ignore Recovery Files made by Excel +~$*.xlsx +*.rdl.data -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib +*.jfm -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb +#====================================================================================== +# The below section could possibly be removed as these should be ignored by the above. +#====================================================================================== + +samples/in-memory/ticket-reservations/DemoWorkload/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs +*.nupkg +samples/in-memory/ticket-reservations/packages/CircularGauge.1.0.0/CreatePackageFile.bat +*.suo +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/bin/Debug/PopulateAlwaysEncryptedData.exe *.pdb +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/bin/Debug/PopulateAlwaysEncryptedData.vshost.exe +*.Cache +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/bin/Debug/PopulateAlwaysEncryptedData.exe.config +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs +samples/databases/wide-world-importers/workload-drivers/vehicle-location-insert/MultithreadedInMemoryTableInsert/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs +*.exe +samples/features/in-memory/iot-smart-grid/ConsoleClient/bin/Release/DataGenerator.dll +samples/features/in-memory/iot-smart-grid/ConsoleClient/bin/Release/Reports/PowerDashboard.pbix +samples/databases/wide-world-importers/wwi-integration-etl/Daily ETL/bin/Development/Daily ETL.ispac +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/obj/Release/PopulateAlwaysEncryptedData.csproj.FileListAbsolute.txt +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/bin/Release/PopulateAlwaysEncryptedData.vshost.exe.config +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/obj/Release/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs +*.dll +samples/features/in-memory/ticket-reservations/DemoWorkload/obj/Release/DemoWorkload.FrmConfig.resources +samples/features/in-memory/ticket-reservations/DemoWorkload/bin/Release/DemoWorkload.vshost.exe.config +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/obj/Debug/PopulateAlwaysEncryptedData.csproj.FileListAbsolute.txt +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/bin/Debug/PopulateAlwaysEncryptedData.vshost.exe.config +*.zip +samples/features/in-memory/ticket-reservations/packages/CircularGauge.1.0.0/CreatePackageFile.bat +samples/features/in-memory/ticket-reservations/TicketReservations/TicketReservations.dbmdl +samples/databases/wide-world-importers/workload-drivers/vehicle-location-insert/MultithreadedInMemoryTableInsert/obj/Release/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs +samples/databases/wide-world-importers/workload-drivers/vehicle-location-insert/MultithreadedInMemoryTableInsert/obj/Debug/MultithreadedInMemoryTableInsert.csproj.FileListAbsolute.txt +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/obj/Debug/PopulateAlwaysEncryptedData.Properties.Resources.resources +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/obj/Release/PopulateAlwaysEncryptedData.PopulateAlwaysEncryptedDataMain.resources +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/bin/Debug/PopulateAlwaysEncryptedData.vshost.exe.manifest +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/obj/Debug/PopulateAlwaysEncryptedData.PopulateAlwaysEncryptedDataMain.resources +samples/databases/wide-world-importers/workload-drivers/vehicle-location-insert/MultithreadedInMemoryTableInsert/obj/Release/MultithreadedInMemoryTableInsert.Properties.Resources.resources +samples/databases/wide-world-importers/sample-scripts/always-encrypted/PopulateAlwaysEncryptedData/obj/Release/PopulateAlwaysEncryptedData.Properties.Resources.resources +samples/features/in-memory/ticket-reservations/packages/CircularGauge.1.0.0/ReadMe.txt +*.dacpac +samples/features/in-memory/ticket-reservations/TicketReservations/obj/Release/Model.xml +samples/features/in-memory/ticket-reservations/DemoWorkload/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs +*.dat + +*.user +samples/features/in-memory/ticket-reservations/DemoWorkload/obj/Release/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs +samples/databases/wide-world-importers/workload-drivers/vehicle-location-insert/MultithreadedInMemoryTableInsert/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs +samples/features/in-memory/ticket-reservations/DemoWorkload/bin/Debug/DemoWorkload.vshost.exe.config +samples/features/in-memory/ticket-reservations/DemoWorkload/obj/Release/DemoWorkload.Properties.Resources.resources +samples/databases/wide-world-importers/wwi-integration-etl/Daily ETL/obj/Development/Project.params +samples/features/in-memory/ticket-reservations/DemoWorkload/obj/Debug/DemoWorkload.csproj.FileListAbsolute.txt +samples/features/in-memory/iot-smart-grid/Db/obj/Release/Model.xml +samples/applications/iot-smart-grid/DataGenerator/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs +samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/bin/Debug/MultithreadedOrderInsert.exe.config +samples/features/in-memory/iot-smart-grid/ConsoleClient/bin/Release/ConsoleClient.exe.config +*.jfm +samples/features/in-memory/ticket-reservations/TicketReservations/bin/Release/TicketReservations.publish.sql +samples/applications/iot-smart-grid/ConsoleClient/bin/Release/ConsoleClient.exe.config +samples/applications/iot-smart-grid/Db/Db.dbmdl +samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/obj/Release/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs +samples/databases/wide-world-importers/wwi-dw-ssdt/wwi-dw-ssdt/obj/Debug/Model.xml +samples/databases/wide-world-importers/wwi-dw-ssdt/wwi-dw-ssdt/WideWorldImportersDW.dbmdl +samples/features/in-memory/iot-smart-grid/WinFormsClient/bin/Release/Reports/PowerDashboard.pbix +samples/databases/wide-world-importers/wwi-ssdt/wwi-ssdt/WideWorldImporters.dbmdl +samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs +samples/databases/wide-world-importers/wwi-ssasmd/wwi-ssasmd/bin/WWI-SSASMD.asdatabase +samples/applications/iot-smart-grid/Db/obj/Release/Db.sqlproj.FileListAbsolute.txt +*.manifest +samples/applications/iot-smart-grid/WinFormsClient/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs +samples/databases/wide-world-importers/wwi-ssasmd/wwi-ssasmd/obj/Development/IncrementalShapshot.xml +samples/applications/iot-smart-grid/ConsoleClient/bin/Release/Reports/PowerDashboard.pbix +samples/applications/iot-smart-grid/Db/obj/Release/Model.xml +samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/obj/Release/MultithreadedOrderInsert.csproj.FileListAbsolute.txt +samples/applications/iot-smart-grid/ConsoleClient/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs +samples/applications/iot-smart-grid/WinFormsClient/bin/Release/Client.exe.config +samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/bin/Release/MultithreadedOrderInsert.exe.config +samples/databases/wide-world-importers/workload-drivers/order-insert/MultithreadedOrderInsert/obj/Debug/MultithreadedInMemoryTableInsert.MultithreadedOrderInsertMain.resources +/samples/features/epm-framework/5.0/2Reporting/PolicyReports/PolicyEvaluationErrors.rdl.data +/samples/features/epm-framework/5.0/2Reporting/PolicyReports/PolicyEvaluationErrorDetails.rdl.data +/samples/features/epm-framework/5.0/2Reporting/PolicyReports/PolicyEvaluationDetails.rdl.data +/samples/features/epm-framework/5.0/2Reporting/PolicyReports/PolicyDetails.rdl.data +/samples/features/epm-framework/5.0/2Reporting/PolicyReports/PolicyDashboard.rdl.data +/samples/features/epm-framework/5.0/2Reporting/PolicyReports/bin/Debug +/samples/features/epm-framework/5.0/2Reporting/PolicyReports/PolicyDashboard - Backup.rdl +/samples/features/epm-framework/5.0/2Reporting/PolicyReports/PolicyDashboardFiltered.rdl.data +samples/features/sql-management-objects/src/out/CodeCoverage/CodeCoverage.config + +# Certificates +*.pem +*.p12 -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf +# Composer +/vendor/ \ No newline at end of file diff --git a/F1.txt b/F1.txt new file mode 100644 index 0000000..7e91e2e --- /dev/null +++ b/F1.txt @@ -0,0 +1 @@ +asdasfahgjgh456345fghjhj \ No newline at end of file diff --git a/fork1.c b/fork1.c new file mode 100644 index 0000000..feac04d --- /dev/null +++ b/fork1.c @@ -0,0 +1,35 @@ + +#include +#include +#include +int main() +{ + + // make two process which run same + // program after this instruction + fork(); + + printf("Hello world!\n"); + return 0; +} +//#include +// +//int main() +//{ +// char c; +// FILE *f1,*f2; +// char name1[100]; +// char name2[100]; +// printf("Enter the file1 to open for reading \n"); +// scanf("%s", name1); +// printf("Enter the file2 to open for writing \n"); +// scanf("%s", name2); +// f1 = fopen(name1, "r"); +// f2 = fopen(name2, "a"); +// c = fgetc(f1); +// while (c != EOF) +// { +// fputc(c, f2); +// c = fgetc(f1); +// } +//} diff --git a/open1.c b/open1.c new file mode 100644 index 0000000..51a1566 --- /dev/null +++ b/open1.c @@ -0,0 +1,14 @@ +#include +int main() +{ + char c; + FILE *f1,*f2; + f1 = fopen("F1.txt", "r"); + f2 = fopen("F2.txt", "a"); + c = fgetc(f1); + while (c != EOF) + { + fputc(c, f2); + c = fgetc(f1); + } +} diff --git a/open2.c b/open2.c new file mode 100644 index 0000000..8342ddd --- /dev/null +++ b/open2.c @@ -0,0 +1,21 @@ +#include + +int main() +{ + char c; + FILE *f1,*f2; + char name1[100]; + char name2[100]; + printf("Enter the file1 to open for reading \n"); + scanf("%s", name1); + printf("Enter the file2 to open for writing \n"); + scanf("%s", name2); + f1 = fopen(name1, "r"); + f2 = fopen(name2, "a"); + c = fgetc(f1); + while (c != EOF) + { + fputc(c, f2); + c = fgetc(f1); + } +} diff --git a/write-read.c b/write-read.c new file mode 100644 index 0000000..199992d --- /dev/null +++ b/write-read.c @@ -0,0 +1,11 @@ +#include "stdio.h" +#include "unistd.h" + +#define COUNT 15 + +int main() { + char buff[COUNT + 1]; + int count = read(STDIN_FILENO, buff, COUNT); + printf("Length of input is: %d\n", count); + write(STDOUT_FILENO, buff, count); +} \ No newline at end of file From 16feca9c97097a8ddd3a96b8ebb23acf4883c247 Mon Sep 17 00:00:00 2001 From: Phlake Date: Sat, 6 Aug 2022 15:32:38 +0300 Subject: [PATCH 2/3] Added lab_2 files --- .gitignore | 2 +- CMakeLists.txt | 6 ++++++ README.md | 26 ++++++++++++++++++++++++++ fork1.c | 45 ++++++++++++++++----------------------------- fork2.c | 23 +++++++++++++++++++++++ wait1.c | 20 ++++++++++++++++++++ wait2.c | 22 ++++++++++++++++++++++ wait3.c | 22 ++++++++++++++++++++++ 8 files changed, 136 insertions(+), 30 deletions(-) create mode 100755 CMakeLists.txt create mode 100644 fork2.c create mode 100644 wait1.c create mode 100644 wait2.c create mode 100644 wait3.c diff --git a/.gitignore b/.gitignore index 9aef123..92f3be6 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,7 @@ *.user *.userosscache *.sln.docstates -CMakeLists.txt +a.out cmake-build-debug/ # User-specific files (MonoDevelop/Xamarin Studio) diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..a09546f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.22) +project(OS C) + +set(CMAKE_C_STANDARD 99) + +add_executable(OS write-read.c open1.c open2.c fork1.c fork2.c wait1.c wait2.c wait3.c) diff --git a/README.md b/README.md index 4570805..a84cc91 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,28 @@ # OS Operation systems course LPNU 2022 + +Використовуючи read та read1 як основу, а також приклади з використанням виклику write() напишіть: + +read() write() +1. програму яка буде читати максимум 15 символів які введе користувач і виведіть їх на екран (write-read.c) +2. програму яка буде виводити кількість символів які були прочитаними викликом read() (write-read.c) + +open() +3. Напишіть програму для читання вмісту файлу F1 у файл F2. Вміст файлу F2 не повинен бути видалений або перезаписаний. підказка: використовуйте прапор O_APPEND (open1.c) +4. Напишіть програму за допомогою системного виклику open() для копіювання вмісту одного файлу в інший файл. (open2.c) + +fork() +5. Напишіть програму за допомогою системного виклику fork() для створення двох дочірніх процесів, тобто батьківського P, що має дочірні процеси P1 і P2. (fork1.c) +6. Напишіть програму, використовуючи системний виклик fork(), щоб створити ієрархію з трьох процесів, так що P2 є дочірнім до P1, а P1 — дочірнім до P. (fork2.c) + +wait() +7. Створіть стосунки «parent-child» між двома процесами. (wait1.c) + Parent має надрукувати два твердження: + A) Parent (P) має ідентифікатор + B) Ідентифікатор child P — + Child повинна надрукувати два вислови: + C) У child є ідентифікатор + D) Мій parent ідентифікатор + Використовуйте wait() таким чином, щоб порядок чотирьох операторів A, B, C і D був: A B C D +8. Створіть зв’язок «parent-child» між двома процесами, щоб процес «child» створив файл з іменем Relation.txt, а процес «parent» записав в нього деякий вміст, беручи вхідні дані від користувача. (wait2.c) +9. Напишіть програму для створення двох дочірніх процесів. Батьківський процес повинен почекати, поки обидва дитини закінчать. (wait3.c) \ No newline at end of file diff --git a/fork1.c b/fork1.c index feac04d..f80cd3a 100644 --- a/fork1.c +++ b/fork1.c @@ -1,35 +1,22 @@ - #include #include #include -int main() -{ +#include - // make two process which run same - // program after this instruction - fork(); - printf("Hello world!\n"); - return 0; +int main() +{ + printf("Parent process (P0), pid = %d\n", getpid()); + pid_t child1, child2; + child1 = fork(); + if (child1 == 0) { + printf("My pid = %d (P1), my parent = %d\n", getpid(), getppid()); + } + else { + child2 = fork(); + if (child2 == 0){ + printf("My pid = %d (P2), my parent = %d\n", getpid(), getppid()); + } + wait(NULL); + } } -//#include -// -//int main() -//{ -// char c; -// FILE *f1,*f2; -// char name1[100]; -// char name2[100]; -// printf("Enter the file1 to open for reading \n"); -// scanf("%s", name1); -// printf("Enter the file2 to open for writing \n"); -// scanf("%s", name2); -// f1 = fopen(name1, "r"); -// f2 = fopen(name2, "a"); -// c = fgetc(f1); -// while (c != EOF) -// { -// fputc(c, f2); -// c = fgetc(f1); -// } -//} diff --git a/fork2.c b/fork2.c new file mode 100644 index 0000000..4e77434 --- /dev/null +++ b/fork2.c @@ -0,0 +1,23 @@ +#include +#include +#include +#include + + +int main() +{ + printf("Parent process (P0), pid = %d\n", getpid()); + pid_t child1, child2; + child1 = fork(); + if (child1 == 0) { + printf("My pid = %d (P1), my parent = %d\n", getpid(), getppid()); + child2 = fork(); + if (child2 == 0){ + printf("My pid = %d (P2), my parent = %d\n", getpid(), getppid()); + } + wait(NULL); + } else { + wait(NULL); + } + +} diff --git a/wait1.c b/wait1.c new file mode 100644 index 0000000..2cd5819 --- /dev/null +++ b/wait1.c @@ -0,0 +1,20 @@ +#include +#include +#include +#include + + +int main() +{ + pid_t child1; + child1 = fork(); + if (child1 != 0) { + printf("Parent process (P0), pid = %d\n", getpid()); + printf("Child process (P1), pid = %d\n", child1); + } + if (child1 == 0) { + printf("My pid = %d (P1)\n", getpid()); + printf("My parent = %d (P0)\n", getppid()); + } + wait(NULL); +} diff --git a/wait2.c b/wait2.c new file mode 100644 index 0000000..1a1f96a --- /dev/null +++ b/wait2.c @@ -0,0 +1,22 @@ +#include +#include +#include +#include +#include + + +int main() +{ + char str1[100]; + pid_t child1; + FILE *f1; + child1 = fork(); + if (child1 == 0) { + fopen("Relation.txt", "a"); + }else { + wait(NULL); + f1 = fopen("Relation.txt", "w"); + scanf("%99s", str1); + fprintf(f1, "%s", str1); + } +} diff --git a/wait3.c b/wait3.c new file mode 100644 index 0000000..f80cd3a --- /dev/null +++ b/wait3.c @@ -0,0 +1,22 @@ +#include +#include +#include +#include + + +int main() +{ + printf("Parent process (P0), pid = %d\n", getpid()); + pid_t child1, child2; + child1 = fork(); + if (child1 == 0) { + printf("My pid = %d (P1), my parent = %d\n", getpid(), getppid()); + } + else { + child2 = fork(); + if (child2 == 0){ + printf("My pid = %d (P2), my parent = %d\n", getpid(), getppid()); + } + wait(NULL); + } +} From 187c2342d2596743fddabb30342c1ee404ada21e Mon Sep 17 00:00:00 2001 From: Phlake Date: Mon, 5 Sep 2022 22:13:30 +0300 Subject: [PATCH 3/3] minor improvements --- wait3.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wait3.c b/wait3.c index f80cd3a..2e1246e 100644 --- a/wait3.c +++ b/wait3.c @@ -6,17 +6,20 @@ int main() { - printf("Parent process (P0), pid = %d\n", getpid()); pid_t child1, child2; child1 = fork(); if (child1 == 0) { printf("My pid = %d (P1), my parent = %d\n", getpid(), getppid()); + return 0; } else { child2 = fork(); if (child2 == 0){ printf("My pid = %d (P2), my parent = %d\n", getpid(), getppid()); + return 0; } wait(NULL); + wait(NULL); + printf("Parent process (P0), pid = %d\n", getpid()); } }