简体   繁体   中英

reading from stdin using read() in C

I want to read from the stdin char by char and compare it with a different char using system-calls only, my problem is , given the code:

#include "util.h"
#define STDOUT 1
#define STDIN 1
#define SYS_READ 3
#define SYS_WRITE 4
#define SYS_OPEN 5
#define SYS_CLOSE 6
#define SYS_LSEEK 19

int main (int argc , char* argv[], char* envp[])
{   
    char  str[512];
    int fd;
    if((fd= system_call(SYS_OPEN,STDIN,0, 0777))==-1){
        system_call(SYS_WRITE,STDOUT,"stdin error", 11);
    }

    while((system_call(SYS_READ,fd, str,1))>0){
        if((strncmp(";",str,1))==0){
            system_call(SYS_WRITE,STDOUT,str, 1);
            system_call(SYS_WRITE,STDOUT,"\n", 2);
        }
    else{
        system_call(SYS_WRITE,STDOUT,str, 1);       
        }
    }

return 0;
}

I have an Assembly file that turn this: "system_call(SYS_WRITE,STDOUT,"\\n", 2);" to write(...);
now the problem is, I don't know how to make it wait for the input, so it never starts the while loop because it didn't read a thing from the input to begin with.


edit, the code to System-Call:

system_call:
push    ebp             ; Save caller state
mov     ebp, esp
sub     esp, 4          ; Leave space for local var on stack
pushad                  ; Save some more caller state

mov     eax, [ebp+8]    ; Copy function args to registers: leftmost...        
mov     ebx, [ebp+12]   ; Next argument...
mov     ecx, [ebp+16]   ; Next argument...
mov     edx, [ebp+20]   ; Next argument...
int     0x80            ; Transfer control to operating system
mov     [ebp-4], eax    ; Save returned value...
popad                   ; Restore caller state (registers)
mov     eax, [ebp-4]    ; place returned value where caller can see it
add     esp, 4          ; Restore caller state
pop     ebp             ; Restore caller state
ret                     ; Back to caller

Solved

I ended up fixing the problem with STDIN(define was off), and not defining a fd to receive the values and it ended up working, not sure why exactly still, I'm guessing fd was set non-blocking .

您将STDIN定义为1,应将其定义为0。1是STDOUT,因此您试图从仅用于写入的文件句柄中进行读取。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM