![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| High Level Programming Post frågor om C, C + +, Java, SQL och andra programmeringsspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| kontrollera Nollskiljt värde | philplasma | UNIX for Dummies Frågor & Svar | 6 | 01-08-2008 04:51 |
| kontroll uid | filthymonk | Shell-programmering och Skript | 7 | 07-19-2007 11:40 |
| Kontrollera cp framsteg | MarGur | UNIX for Dummies Frågor & Svar | 0 | 05-15-2007 05:13 |
| Kontroll för PXE | maestro @ altiris | Sun Solaris | 5 | 05-25-2004 01:06 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Hej,
Jag tränar utöva program med System samtal. Motion Fråga: skriva ett pogram att acceptera ett filnamn från användaren. Programmet ska skriva ecery femte byte av fil till standard output. Min Program: # Include <stdio.h> # Include <fcntl.h> # Include <error.h> viktigaste () ( int fd, first_offset \u003d 5, move_offset \u003d 0, x \u003d 1; char a, namn [20]; scanf ( "% s", namn); fd \u003d open (namn, O_RDONLY, 0755); printf ( "fd är% d", fd); if (fd \u003d\u003d- 1) ( printf ( "error"); exit (1); ) while (x <5) ( move_offset \u003d move_offset + first_offset; lseek (FD, move_offset-1, 0); read (fd, namn, sizeof (namn)); skriva (1, namn, 1); x + +; ) ) Effekt: [ramki @ lindesk3 sysint_ex] $ cc ex1.c-o ex1 [ramki @ lindesk3 sysint_ex] $ ./ex1 . / test FIVEfd är 3 Filen "Test" innehåll: abcdFfghiIklmnVpqrsE Min fråga nu: 1. i programmet, jag använde ett tag loop med en varaible "X" och jämföra det slumpmässiga ingen av mina val 5. Istället vill jag se EOF villkor i whilepart. Hur man kontrollerar det. Om vi använder filen pekaren och fopen fn kan vi använda samtidigt (feof (fp) \u003d\u003d 0). Men vi använde syatem samtal och jag vet hur man kontrollerar villkor här. 2. I te programmet produktion, jag hittade "fem" innan du skriver ut den filedescriptor nummer. Men enligt min programflöde, FD ska skrivas ut först och sedan produktionen "fem". 3.Is det några othet sätt att skriva program mer enkelt och exakt, särskilt med hjälp piointer för att få namnet på filen, instaed att använda Array. Please help ... Tack, Ramkrix |
|
||||
|
Citat:
Kod:
#include <stdio.h>
main(int argc, char *argv[])
{
char *infile;
FILE *stream;
infile = argv[1];
stream = fopen(infile, "r");
}
... nu kan du använda ström status funktioner som feof eller fError. |
|
||||
|
Tack för ditt svar Shamrock ..
Är ôçò Förresten, jag måste inkludera skick medan loop: while (feof (stream) \u003d\u003d 0) En fråga till er: i stället för att använda kommandoraden args och C-biblioteket FNS kan vi kontrollera detta genom att ha programmet absoluta system samtal .. Tack på förhand Ramkrix |
|
||||
|
Citat:
Systemet samtal är bättre för behandlingen 5 byte i taget från indatafilen och tryckning femte byte till standard output. Denna metod är att föredra framför den ökar en räknare och upprepade tester om x <5 eller kontroll för EOF använder feof () standard lib funktion. Kod:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
main(int argc, char *argv[])
{
int fd;
char name[5];
fd = open("/path/to/input/file", O_RDONLY);
while (read(fd, (void *) name, (size_t) 5) == 5)
printf("the fifth byte is %c\n", name[4]);
}
|
|
||||
|
Än en gång tack för nyttig info Shamrock.
Låt mig fråga er sista fråga från ditt svar: while (read (fd, (void *) namn, (size_t) 5) \u003d\u003d 5) Den "(size_t) 5", vad innebär det och kommer det att göra? Bcoz jag läste från en bok som vi måste ge sizeof () operatör på slutet. Även du comaparing att värdet "\u003d\u003d 5"? Jag kunde inte förstå här. Nedanstående är vad jag kodat i mitt program: read (fd, namn, sizeof (namn)); Var min rätt en? ![]() |